Redis 有序集合(zset)

Redis zinterstore 命令用于计算多个集合的交集,其中默认情况下,分数为每个元素的分数之和,并将结果存储在指定key中。

语法:

zinterstore  key increment member 

可用版本

>=2.0.0.

返回值

整数,结果排序集中的元素个数。

返回值类型

整数

示例1:Redis zinterstore

127.0.0.1:6379> zadd srcset1 5 M 6 N 7 O
(integer) 3
127.0.0.1:6379> zadd srcset2 3 N 2 O 4 P
(integer) 3
127.0.0.1:6379> zinterstore  desset 2 srcset1 srcset2
(integer) 2
127.0.0.1:6379> zrange desset 0 -1
1) "N"
2) "O"
127.0.0.1:6379> zrange desset 0 -1 WITHSCORES
1) "N"
2) "9"
3) "O"
4) "9" 

交集中,第一个集合的N=6,第二集合的N=3,所以交集的N=6+3=9

示例2:Redis zinterstore :使用权重

127.0.0.1:6379> zadd srcset1 5 M 6 N 7 O
(integer) 3
127.0.0.1:6379> zadd srcset2 3 N 2 O 4 P
(integer) 3
127.0.0.1:6379> zinterstore  desset 2 srcset1 srcset2 WEIGHTS 2 3
(integer) 2
127.0.0.1:6379> zrange desset 0 -1 WITHSCORES
1) "O"
2) "20"
3) "N"
4) "21" 

上面的例子中有权重,其中第一个集合的权重是2,第二个权重是3,第一个集合中的N=6,第二个集合中的N=3

那么交集中的N= 6*2+3*3=21

示例3:Redis zinterstore :使用聚合函数

127.0.0.1:6379> zadd srcset1 5 M 6 N 7 O
(integer) 3
127.0.0.1:6379> zadd srcset2 3 N 2 O 4 P
(integer) 3
127.0.0.1:6379> zinterstore  desset 2 srcset1 srcset2 AGGREGATE MIN
(integer) 2
127.0.0.1:6379> zrange desset 0 -1 WITHSCORES
1) "O"
2) "2"
3) "N"
4) "3"
127.0.0.1:6379> zinterstore  desset 2 srcset1 srcset2 AGGREGATE MAX
(integer) 2
127.0.0.1:6379> zrange desset 0 -1 WITHSCORES
1) "N"
2) "6"
3) "O"
4) "7" 

示例4:Redis zinterstore :三组求交集

127.0.0.1:6379> zadd srcset1 5 M 6 N 7 O
(integer) 3
127.0.0.1:6379> zadd srcset2 3 N 2 O 4 P
(integer) 3
127.0.0.1:6379> zadd srcset3 1 O 2 P 3 Q
(integer) 3
127.0.0.1:6379> zinterstore  desset 3 srcset1 srcset2 srcset3
(integer) 1
127.0.0.1:6379> zrange desset 0 -1 WITHSCORES
1) "O"
2) "10"