*Redis SADD 命令 向集合中添加一个或多个成员

*语法

SADD key member [member ...]

*说明

将指定的 member 成员添加(add)到存储在 keySet 集合中。

如果 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