redis多个ZSet求交集ZINTERSTORE指令详解

分类:知识百科 日期: 点击:0

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 中的较大值。

标签:

版权声明

1. 本站所有素材,仅限学习交流,仅展示部分内容,如需查看完整内容,请下载原文件。
2. 会员在本站下载的所有素材,只拥有使用权,著作权归原作者所有。
3. 所有素材,未经合法授权,请勿用于商业用途,会员不得以任何形式发布、传播、复制、转售该素材,否则一律封号处理。
4. 如果素材损害你的权益请联系客服QQ:77594475 处理。