*Redis ZINTER 命令

返回多个 Sorted Set 的交集。Redis 6.2+ 引入。


*语法

ZINTER numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM | MIN | MAX] [WITHSCORES]

*参数说明

参数 类型 必填 说明
numkeys Integer key 的数量
key String Sorted Set 键名
WEIGHTS Double 权重
AGGREGATE 标志 SUM(默认)、MIN、MAX
WITHSCORES 标志 同时返回 score

*返回值

条件 返回值
有交集 member 数组;WITHSCORES 时 [member, score, ...]
无交集 空数组 []

*时间复杂度

O(N*log(M)),N 为最小集合大小,M 为最大集合大小。


*示例

> ZADD zset1 1 a 2 b 3 c
(integer) 3
> ZADD zset2 2 b 3 c 4 d
(integer) 3

> ZINTER 2 zset1 zset2 WITHSCORES
1) "b"
2) "4"     # 2+2=4
3) "c"
4) "6"     # 3+3=6

*常见错误

错误 原因 解决
ERR wrong number of arguments numkeys 和实际传入的 key 数量不一致 调用前确认源集合数量,确保 numkeys 与实际 key 数量一致
WRONGTYPE Operation against a key holding the wrong kind of value 源 key 类型不是 Sorted Set 使用 TYPE 命令确认所有源 key 类型为 zset
ERR syntax error WEIGHTS 数量少于 numkeys 确保 WEIGHTS 后跟的数量与 numkeys 相等,默认均为 1
ERR syntax error AGGREGATE 参数拼写错误或传入不支持值 仅支持 SUM、MIN、MAX,检查拼写和大小写

*最佳实践

  1. 交集排行榜:多个维度都上榜的用户,计算综合排名。

  2. WEIGHTS 加权求和:不同维度的 score 重要性不同时,使用 WEIGHTS 调整权重再聚合。

  3. AGGREGATE MIN 取最小值:多维度考核场景,使用 MIN 聚合取各维度最低分作为综合分。

  4. 大数据量用 ZINTERSTORE:结果成员数量 > 1000 时,使用 ZINTERSTORE 替代 ZINTER 避免阻塞网络。

*5. 版本兼容性:ZINTER 是 Redis 6.2+ 命令,低版本使用 ZINTERSTORE + ZRANGE 替代。

*FAQ

Q1: ZINTER 和 SINTER 有什么区别? A: ZINTER 操作 Sorted Set,支持 score 聚合;SINTER 操作 Set。

Q2: ZINTER 返回的成员有顺序吗? A: 有。按聚合后的 score 从小到大排序返回。

Q3: 交集为空时返回什么? A: 返回空数组 []

Q4: WEIGHTS 默认值是多少? A: 默认所有集合的权重为 1,即直接相加。

Q5: ZINTER 和 ZINTERSTORE 性能有差异吗? A: 计算逻辑相同,差异在于结果传输方式。大数据量时 ZINTERSTORE 网络开销更小。