Redis zinterstore (有序集合交集存储)
一、作用
zinterstore:把多个 ZSet 有序集合做交集 ,并把结果存入一个新的 ZSet ,自动覆盖目标 key。
语法:
redis
zinterstore 目标key 数量 集合1 集合2 [集合3...] [weights 权重] [aggregate sum/min/max]
二、核心规则
- 只保留同时出现在所有 ZSet 里的成员(交集)
- 交集后的分数 可以按
sum、min、max合并计算 - 第一个参数是目标 key ,原有数据直接被覆盖(和 set 的 sinterstore 一个设计逻辑)
- 第二个参数要写参与计算的集合个数,不能漏
三、最简示例
准备两个有序集合:
redis
zadd rank:a 10 张三 20 李四 30 王五
zadd rank:b 15 李四 25 王五 35 赵六
求交集,存入 rank:inter:
redis
zinterstore rank:inter 2 rank:a rank:b
交集成员:李四、王五 默认分数规则:sum 累加
- 李四:20+15 = 35
- 王五:30+25 = 55
查看结果:
redis
zrange rank:inter 0 -1 withscores
四、自定义聚合规则
1. 取分数最小值
redis
zinterstore rank:inter 2 rank:a rank:b aggregate min
2. 取分数最大值
redis
zinterstore rank:inter 2 rank:a rank:b aggregate max
五、权重 weights 用法
给每个集合的分数先乘权重,再聚合:
redis
zinterstore rank:inter 2 rank:a rank:b weights 2 1 aggregate sum
意思:
- rank:a 每个分数 ×2
- rank:b 每个分数 ×1
- 再按 sum 相加
六、应用场景
-
共同好友 + 带权重排序两个人共同好友,再按亲密值 / 互动分排序。
-
多条件榜单筛选同时满足「付费用户」「活跃用户」两个 ZSet,交集后生成精准榜单。
-
商品多维度评分合并销量、好评、热度多个榜单,交集后加权算出综合排名。
-
推荐系统过滤从候选推荐列表中,过滤掉已浏览、已拉黑用户,保留交集并重新计分排序。
七、一句话总结
zinterstore 是 ZSet 交集并持久化 ,可对分数做 sum/min/max 聚合,支持权重,目标 key 会直接覆盖旧数据,适合做带分数排序的共同关系、多条件筛选、加权排行榜。