Redis ZINTERSTORE 指令
Redis ZINTERSTORE 指令计算给定的一个或多个有序集的交集,并将结果集存储在新的有序集合 key 中。
ZINTERSTORE 指令语法
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
ZINTERSTORE 指令参数
- destination:必需参数,新建有序集合的key。
- numkeys:必需参数,输入集合的个数。
- key:必需参数,要操作的有序集合key。
- WEIGHTS:可选参数,与每个给定有序集相对应的权重。
- AGGREGATE:可选参数,用于指定在将结果集合存储到destination时,所使用的聚合函数。
ZINTERSTORE 指令示例
假设我们有两个有序集合,一个是 key1,元素有:(a,1) (b,2) (c,3),另一个是 key2,元素有:(b,2) (c,4) (d,5)。
127.0.0.1:6379> ZADD key1 1 a 2 b 3 c (integer) 3 127.0.0.1:6379> ZADD key2 2 b 4 c 5 d (integer) 3 127.0.0.1:6379> ZINTERSTORE dest 2 key1 key2 (integer) 2 127.0.0.1:6379> ZRANGE dest 0 -1 WITHSCORES 1) "b" 2) "4" 3) "c" 4) "7"
从上面的示例中可以看出,ZINTERSTORE 指令将 key1 和 key2 的交集存储在 dest 中,交集的元素有:(b,2) (c,3),其中 b 的分值为 key1 中的 2 与 key2 中的 2 相加,而 c 的分值为 key1 中的 3 与 key2 中的 4 相加。
ZINTERSTORE 指令可选参数
ZINTERSTORE 指令可以使用 WEIGHTS 参数来指定每个有序集的权重,例如:
127.0.0.1:6379> ZINTERSTORE dest 2 key1 key2 WEIGHTS 2 1 (integer) 2 127.0.0.1:6379> ZRANGE dest 0 -1 WITHSCORES 1) "b" 2) "6" 3) "c" 4) "10"
从上面的示例中可以看出,ZINTERSTORE 指令将 key1 和 key2 的交集存储在 dest 中,交集的元素有:(b,2) (c,3),其中 b 的分值为 key1 中的 2 乘以 2 与 key2 中的 2 相加,而 c 的分值为 key1 中的 3 乘以 1 与 key2 中的 4 相加。
ZINTERSTORE 指令还可以使用 AGGREGATE 参数来指定聚合函数,例如:
127.0.0.1:6379> ZINTERSTORE dest 2 key1 key2 AGGREGATE MAX (integer) 2 127.0.0.1:6379> ZRANGE dest 0 -1 WITHSCORES 1) "b" 2) "2" 3) "c" 4) "4"
从上面的示例中可以看出,ZINTERSTORE 指令将 key1 和 key2 的交集存储在 dest 中,交集的元素有:(b,2) (c,3),其中 b 的分值为 key1 中的 2 与 key2 中的 2 中的较大值,而 c 的分值为 key1 中的 3 与 key2 中的 4 中的较大值。