首页/数据/数据库速查/SUNION / SDIFF 并集与差集
Redis 命令96 条

SUNION / SDIFF 并集与差集

SUNION 合并去重、SDIFF 求「在第一个集合但不在后面集合」的差集;均有 STORE 变体可持久化结果。

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

并集与差集

SUNION 求多个集合的并集并自动去重,SDIFF 求「在第一个集合但不在后面集合」的差集,方向敏感:A 减 B 与 B 减 A 结果完全不同。两者都有 STORE 变体,把结果落到目标键并返回结果基数,适合标签合并、黑名单剔除与人群圈选这类需求。

基本信息

适用Redis 1.0 及以上 Set 命令
SUNION并集去重,只输出不落盘
SDIFF差集,方向敏感,基准集合放第一位
STORE 变体SUNIONSTORE、SDIFFSTORE、SINTERSTORE,计算并写入目标键

示例

示例
SADD a x y z
SADD b y z w
SUNION a b               # x y z w:并集去重
SDIFF a b                # x:A 有而 B 没有
SDIFF b a                # w:方向反过来结果不同
SINTER a b               # y z:交集
SUNIONSTORE all:ab a b   # 返回 4,结果存进 all:ab
SDIFFSTORE only:a a b    # 返回 1,结果存进 only:a
SINTERCARD 2 a b LIMIT 100   # 只看交集的规模,避免取出全部成员
EXPIRE all:ab 3600       # 结果键设置过期,避免长期占用内存

命令与结果读法

命令结果注意
SUNION并集,成员去重多个大集合全量输出压力大
SDIFF有方向的差集基准集合必须放第一位
SINTER交集适合筛选同时满足多个条件的人群
SINTERCARD交集基数,可加 LIMIT只看规模时比取出成员更省资源
STORE 变体返回结果基数并落盘目标键内容会被覆盖,需独立命名

典型使用场景

  • 标签合并:把多个标签集合求并集得到候选人群
  • 黑名单剔除:用差集从基础上再筛掉命中黑名单的用户
  • 交集圈选:找出同时满足两个条件的用户集合
  • 结果缓存:用 STORE 变体把合并结果落盘并设置过期
  • 规模评估:用 SINTERCARD 估算交集大小再决定是否全量处理
SDIFF 不是对称差:要得到「只出现在其中一个集合」的成员,需要用并集减去交集,而不是直接做差集。
对大集合作并集或差集会在主线程一次完成,成员数量大时耗时与网络开销都很可观,应放在低峰执行或改用 SINTERCARD 先估算规模。

组合计算提示

  • 输入集合可以有多个,复杂筛选拆成多步计算比一条命令更好维护
  • 结果键统一加前缀并设置过期,便于集中清理与识别

易错点

  • 把 SDIFF 当对称差使用:它是有方向的差集,结果与预期不符
  • STORE 变体用了正在使用的键名:目标键被覆盖写入,原始数据丢失
  • 大集合直接全量输出:主线程阻塞与网络压力叠加,业务请求随之变慢
  • 结果键不设过期:临时结果长期驻留内存,逐渐变成新的容量负担

数据来源与参考

  • Redis 官方文档: SUNION
  • Redis 官方文档: SDIFF

相关工具

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