分类 redis 下的文章

命令计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination 。

默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和。

ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]

 

$ redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> zadd z1 2 cat 3 dog
(integer) 2
127.0.0.1:6379> zadd z2 1 cat 4 goose
(integer) 2
// 返回交集里成员的数量。新集合中成员分数值默认是给定集合下成员分数值之和
127.0.0.1:6379> ZINTERSTORE z3 2 z1 z2
(integer) 1
127.0.0.1:6379> ZRANGE z3 0 -1 withscores
1) "cat"
2) "3"
// 使用权重时,也返回交集里成员的数量。默认依然是分数值相加,但是要先乘以权重值,此处即是2*1+1*2=4
127.0.0.1:6379> ZINTERSTORE z4 2 z1 z2 WEIGHTS 1 2
(integer) 1
127.0.0.1:6379> ZRANGE z4 0 -1 withscores
1) "cat"
2) "4"
// AGGREGATE包含SUM/MIN/MAX。ZINTERSTORE默认使用SUM。
// MIN即为取给定集合里最小的分数值,MAX则反之
127.0.0.1:6379> ZINTERSTORE z5 2 z1 z2 AGGREGATE MIN
(integer) 1
127.0.0.1:6379> ZRANGE z5 0 -1 withscores
1) "cat"
2) "1"
127.0.0.1:6379> ZINTERSTORE z6 2 z1 z2 AGGREGATE MAX
(integer) 1
127.0.0.1:6379> ZRANGE z6 0 -1 withscores
1) "cat"
2) "2"
//AGGREGATE和权重WEIGHTS一起使用时,取经过权重计算后的结果
//此处即2*3>1*4
127.0.0.1:6379> ZINTERSTORE z7 2 z1 z2 WEIGHTS 3 4 AGGREGATE MAX
(integer) 1
127.0.0.1:6379> ZRANGE z7 0 -1 withscores
1) "cat"
2) "6"