*Redis SADD 命令

向 Set 中添加一个或多个成员。已存在的成员会被忽略。


*语法

SADD key member [member ...]

*参数说明

参数 类型 必填 说明
key String Set 的键名
member String 要添加的成员,可一次添加多个

*返回值

条件 返回值
成功添加的新成员数量 整数
成员已存在 不计入返回值

*时间复杂度

O(1)(单个 member),O(N)(N 个 member)


*示例

> SADD tags redis
(integer) 1

> SADD tags database cache
(integer) 2

# 重复添加
> SADD tags redis
(integer) 0

> SMEMBERS tags
1) "cache"
2) "database"
3) "redis"

*常见错误

  1. 对非 Set 类型使用:返回 WRONGTYPE。

*最佳实践

  1. 去重集合:利用 Set 天然去重,如用户标签、IP 黑名单、投票用户。
  2. 批量添加:一次 SADD 多个 member,减少网络往返。
  3. 集合运算:使用 SINTERSUNIONSDIFF 实现多集合交并差运算。

*FAQ

Q: SADD 和 LPUSH 有什么区别? A: SADD 是 Set,去重且无序;LPUSH 是 List,允许重复且有序。

Q: Set 最大能存多少成员? A: 理论上 232 - 1(约 40 亿),但生产环境建议控制在百万以内,避免 SMEMBERS 阻塞。

Q: 如何判断成员是否在 Set 中? A: 使用 SISMEMBER key memberO(1) 复杂度。