*Redis ZDIFF 命令
返回多个 Sorted Set 的差集(按第一个集合减去后续集合)。Redis 6.2+ 引入。
*语法
ZDIFF numkeys key [key ...] [WITHSCORES]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| numkeys | Integer | 是 | key 的数量 |
| key | String | 是 | Sorted Set 键名,第一个为被减集合 |
| WITHSCORES | 标志 | 否 | 同时返回 score |
*返回值
| 条件 | 返回值 |
|---|---|
| 有差集 | member 数组;WITHSCORES 时 [member, score, ...] |
| 无差集 | 空数组 [] |
*时间复杂度
O(N*log(M)),N 为最小集合大小,M 为最大集合大小。
*示例
> ZADD zset1 1 a 2 b 3 c
(integer) 3
> ZADD zset2 1 b 2 c 3 d
(integer) 3
> ZDIFF 2 zset1 zset2
1) "a"
> ZDIFF 2 zset1 zset2 WITHSCORES
1) "a"
2) "1"
*常见错误
- numkeys 与实际 key 数量不匹配:返回错误。
*最佳实践
- 差集计算:计算只属于某个集合的成员,如"只在今日排行榜但不在昨日排行榜的用户"。
*FAQ
Q: ZDIFF 和 SDIFF 有什么区别? A: ZDIFF 操作 Sorted Set;SDIFF 操作 Set。ZDIFF 保留第一个集合的 score。