*Redis SDIFFSTORE 命令

SDIFFSTORE 计算第一个 Set 与其他 Set 的差集,并将结果保存到 destination key 中。


*语法

SDIFFSTORE destination key [key ...]

*参数说明

参数 类型 必填 说明
destination String 保存差集结果的目标键名
key String 第一个 Set 键名(被减数)
key String 后续 Set 键名(减数),可多个

*返回值

  • Integer:结果 Set 的成员数量

*时间复杂度

O(N),N 为所有参与运算的 Set 成员总数


*示例

*基本用法

> SADD set1 a b c d
(integer) 4
> SADD set2 b c
(integer) 2
> SDIFFSTORE result set1 set2
(integer) 2
> SMEMBERS result
1) "a"
2) "d"

*多个 Set 差集存储

> SADD set3 c d
(integer) 2
> SDIFFSTORE result2 set1 set2 set3
(integer) 1
> SMEMBERS result2
1) "a"

*覆盖已有 destination

> SET oldkey "string"
OK
> SDIFFSTORE oldkey set1 set2
(integer) 2
> TYPE oldkey
set

*常见错误

错误 原因 解决
WRONGTYPE 源 key 不是 Set 类型 检查源 key 的数据类型
ERR wrong number of arguments 缺少 destination 或 key 确保至少提供 destination 和一个源 key

*最佳实践

  • 避免重复计算:大数据量差集结果需要多次使用时,用 SDIFFSTORE 保存到 key 中复用
  • 覆盖注意:destination 若已存在会被覆盖(任何类型都会被替换为 Set)
  • 性能优化:当差集结果很大时,SDIFFSTORE 避免了一次性网络传输大量数据
  • 定时任务:定期用 SDIFFSTORE 计算差集缓存,如黑名单过滤结果

*FAQ

Q1: SDIFFSTORE 和 SDIFF 有什么区别? A: SDIFF 仅返回差集数组;SDIFFSTORE 将结果保存到 destination key 并返回成员数量,便于后续操作。

Q2: destination 已存在会怎样? A: 无论 destination 之前是什么类型或有什么数据,都会被覆盖为新的差集 Set。

Q3: 结果为空时 destination 会怎样? A: 差集为空时,destination key 会被删除(如果存在),返回 0。