*Redis SADD 命令 向集合中添加一个或多个成员
*语法
SADD key member [member ...]
*说明
将指定的 member 成员添加(add)到存储在 key 的 Set 集合中。
如果 key 不存在,SADD 会在添加成员之前创建一个空的集合(Set)。
如果 key 已经存在但存储的值不是 Set 类型,则返回错误。
Redis 的 Set 是无序且不重复(unique)的字符串集合。因此如果尝试添加已经存在于集合中的成员,SADD 会忽略该成员,不会重复添加。如果所有要添加的成员都已经存在于集合中,命令返回 0。
从 Redis 3.2 开始,SADD 支持一次添加多个成员(variadic),这可以显著提高批量添加时的效率。
*返回值
- Integer:返回实际被添加到集合中的新成员数量(不包含已经存在的成员)。
*时间复杂度
- O(N),其中
N是要添加的成员数量。
*版本兼容性
| Redis 版本 | 变更说明 |
|---|---|
| >= 1.0.0 | 初始支持,单成员添加 |
| >= 3.2.0 | 支持一次添加多个成员(variadic SADD) |
*示例
*示例 1:向集合添加单个成员
# 创建一个空的集合,并添加第一个成员
SADD myset "apple"
# 返回:(integer) 1
# 尝试添加已存在的成员
SADD myset "apple"
# 返回:(integer) 0
*示例 2:一次添加多个成员
# 批量添加多个水果
SADD fruits "banana" "cherry" "date" "elderberry"
# 返回:(integer) 4
# 其中部分成员已存在,部分为新成员
SADD fruits "apple" "banana" "fig"
# 返回:(integer) 2 (apple 和 fig 是新成员,banana 已存在被忽略)
*示例 3:集合的典型使用场景——标签系统
# 为文章 1001 添加多个标签
SADD article:1001:tags "redis" "database" "nosql"
# 返回:(integer) 3
# 之后追加更多标签
SADD article:1001:tags "cache" "redis"
# 返回:(integer) 1 (cache 是新标签,redis 已存在被忽略)
# 查看文章的所有标签
SMEMBERS article:1001:tags
# 返回:1) "nosql" 2) "cache" 3) "database" 4) "redis"
*示例 4:与 SCARD 配合检查集合大小
# 清空并重新创建
DEL numbers
SADD numbers 1 2 3 4 5
# 返回:(integer) 5
SADD numbers 3 6 7
# 返回:(integer) 2 (3 已存在,6 和 7 是新成员)
SCARD numbers
# 返回:(integer) 7