首页/数据/数据库速查/SADD / SREM 集合增删
Redis 命令96 条

SADD / SREM 集合增删

Set 是无序去重集合:SADD 添加成员(返回新增个数,已存在不计),SREM 删除成员(返回实际删除数)。

数据库速查数据更新于 2026-10-13

集合增删是什么

集合是无序且自动去重的字符串容器:添加成员时重复值不会报错,只影响返回值;删除成员返回实际删除的数量。这两个返回值很适合做幂等判断——添加返回一说明是首次进入,删除返回一说明确实删掉了。集合还支持交并差运算,标签、关系与去重统计都用得上。

基本信息

用途集合成员的增删与判断
语法添加 键 成员 [成员 ...] / 删除 键 成员 [成员 ...]
返回值实际新增或实际删除的个数
成员性质二进制安全字符串,自动去重
无序性成员没有顺序,不能按下标取
相关命令判断存在、统计数量、取全部成员、集合运算

典型使用场景

  • 文章或商品的标签集合
  • 用户关注列表与粉丝列表
  • 去重统计:同一用户重复提交只计一次
  • 幂等控制:添加返回一表示首次进入
  • 抽奖与筛选:从集合中随机取成员
  • 交集运算:找出同时满足多个条件的目标集合

示例

示例
SADD tags:post1 redis mysql redis   # 返回 2,重复的 redis 只计一次
SADD tags:post1 cache   # 返回 1
SMEMBERS tags:post1   # 返回全部成员,顺序不保证
SREM tags:post1 mysql   # 返回 1,实际删除了一个成员
SREM tags:post1 nope   # 返回 0,成员本来就不存在
SISMEMBER tags:post1 redis   # 判断单个成员是否存在
SCARD tags:post1   # 统计成员数量

命令对照

命令作用返回
添加添加一个或多个成员实际新增个数
删除删除指定成员实际删除个数
单成员判断判断成员是否存在存在返回 1
统计数量成员总数集合大小
取全部成员返回所有成员无序,元素多时慎用
交集多个集合的共同成员结果集合
并集多个集合的全部成员去重结果集合
差集只在第一个集合中的成员结果集合
成员是二进制安全的字符串,数字与文本都能存;用集合做去重队列时,添加返回一才表示首次进入,可以据此做幂等处理。
集合本身无序,成员没有下标;需要按顺序读取的场景应改用列表或有序集合,而不是取出全部成员再在应用层排序。
一次取全部成员在大集合上会形成大响应,既占带宽也阻塞实例;判断单个成员是否存在要用专用命令,不要取全部再遍历。

集合使用清单

  • 判断成员存在用专用命令,不要读全量再遍历
  • 集合数量纳入监控,异常增长说明缺少清理
  • 需要顺序时换用列表或有序集合
  • 用于去重时依赖返回值判断是否首次进入
  • 交并差运算在集合规模大时要评估耗时
  • 临时集合要设置过期,避免长期占用内存
集合的成员是不可变的字符串,修改成员只能先删除再添加:需要携带额外属性时应改用哈希或有序集合,而不是把属性拼进成员名再反复维护。
集合规模上千之后,取全部成员与集合运算的耗时都会明显上升;面向用户的去重队列建议配合过期时间与定期清理,让集合始终维持在可预期的规模。

易错点

  • 用取全部成员的方式判断某个成员是否存在:全量读取带来大响应,应改用单成员判断命令
  • 期望重复添加报错:重复只会让返回值变小,不会报错,依赖返回值做判断的业务要理解这一点
  • 把集合当有序列使用:成员顺序不保证,任何依赖顺序的逻辑都会随机出错
  • 集合无限增长且没有清理逻辑:内存被临时数据占满,触发淘汰或写入失败
  • 在超大集合上做交并差运算:耗时随规模增长并阻塞实例,应评估数据量或改用其他方案

数据来源与参考

  • Redis 官方文档: SADD
  • Redis 官方文档: SREM

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌