今天看啥  ›  专栏  ›  闲云野鹤_23dd

zset类型聚合查询

闲云野鹤_23dd  · 简书  ·  · 2020-12-18 21:42

ZUNIONSTORE

语法

ZUNIONSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX]

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

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

WEIGHTS

使用 WEIGHTS 选项,你可以为 每个 给定有序集 分别 指定一个乘法因子(multiplication factor),每个给定有序集的所有成员的 score 值在传递给聚合函数(aggregation function)之前都要先乘以该有序集的因子。

如果没有指定 WEIGHTS 选项,乘法因子默认设置为 1 。

AGGREGATE

使用 AGGREGATE 选项,你可以指定并集的结果集的聚合方式。

默认使用的参数 SUM ,可以将所有集合中某个成员的 score 值之 和 作为结果集中该成员的 score 值;使用参数 MIN ,可以将所有集合中某个成员的 最小 score 值作为结果集中该成员的 score 值;而参数 MAX 则是将所有集合中某个成员的 最大 score 值作为结果集中该成员的 score 值。

返回值:
保存到 destination 的结果集的基数。

例子 (WEIGHTS )

redis> ZRANGE programmer 0 -1 WITHSCORES
1) "peter"
2) "2000"
3) "jack"
4) "3500"
5) "tom"
6) "5000"

redis> ZRANGE manager 0 -1 WITHSCORES
1) "herry"
2) "2000"
3) "mary"
4) "3500"
5) "bob"
6) "4000"

redis> ZUNIONSTORE salary 2 programmer manager WEIGHTS 1 3   # 公司决定加薪。。。除了程序员。。。
(integer) 6

redis> ZRANGE salary 0 -1 WITHSCORES
1) "peter"
2) "2000"
3) "jack"
4) "3500"
5) "tom"
6) "5000"
7) "herry"
8) "6000"
9) "mary"
10) "10500"
11) "bob"
12) "12000"

例子 (AGGREGATE)

127.0.0.1:6379[11]> ZADD zset1 1 a 2 b 3 c 
(integer) 3
127.0.0.1:6379[11]> ZADD zset2 3 a 2 b 1 c 
(integer) 3
127.0.0.1:6379[11]> ZUNIONSTORE zsum 2 zset1 zset2 aggregate sum
(integer) 3
127.0.0.1:6379[11]> ZUNIONSTORE zmin 2 zset1 zset2 aggregate min
(integer) 3
127.0.0.1:6379[11]> ZUNIONSTORE zmax 2 zset1 zset2 aggregate max
(integer) 3
127.0.0.1:6379[11]> ZRANGE zsum 0 -1 withscores 
1) "a"
2) "4"
3) "b"
4) "4"
5) "c"
6) "4"
127.0.0.1:6379[11]> ZRANGE zmin 0 -1 withscores
1) "a"
2) "1"
3) "c"
4) "1"
5) "b"
6) "2"
127.0.0.1:6379[11]> ZRANGE zmax 0 -1 withscores
1) "b"
2) "2"
3) "a"
4) "3"
5) "c"
6) "3"
127.0.0.1:6379[11]> 

ZINTERSTORE

语法

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

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

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

关于 WEIGHTS 和 AGGREGATE 选项的描述,参见 ZUNIONSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX] 命令。

返回值:
保存到 destination 的结果集的基数。

例子

redis > ZADD mid_test 70 "Li Lei"
(integer) 1
redis > ZADD mid_test 70 "Han Meimei"
(integer) 1
redis > ZADD mid_test 99.5 "Tom"
(integer) 1

redis > ZADD fin_test 88 "Li Lei"
(integer) 1
redis > ZADD fin_test 75 "Han Meimei"
(integer) 1
redis > ZADD fin_test 99.5 "Tom"
(integer) 1

redis > ZINTERSTORE sum_point 2 mid_test fin_test
(integer) 3

redis > ZRANGE sum_point 0 -1 WITHSCORES     # 显示有序集内所有成员及其 score 值
1) "Han Meimei"
2) "145"
3) "Li Lei"
4) "158"
5) "Tom"
6) "199"




原文地址:访问原文地址
快照地址: 访问文章快照