在redis中做sunion时得到计数的方法

时间:2014-07-29 03:25:08

标签: redis

我正在使用Redis进行评估,但一个用例非常出色。我想使用SUNION,但也要收回数量。就像目前来自他们的文档http://redis.io/commands/sunion的SUNION一样:

key1 = {a,b,c,d}
key2 = {c}
key3 = {a,c,e}
SUNION key1 key2 key3 = {a,b,c,d,e}

但希望:

SOTHERUNION key1 key2 key3 = {a:2,b:1,c:3,d:1,e:1}

并且理想地排序如下:

SOTHERUNION key1 key2 key3 = {c:3, a:2,b:1,d:1,e:1}

这是否可行(特别是以高度完美的方式)?我们在MySQL中这样做,可能会有问题。

事先提前

1 个答案:

答案 0 :(得分:3)

SUNION不会帮助您,但ZUNIONSTORE是您正在寻找的。尽管它的名称,它也适用于常规集(默认情况下给成员1分)并与AGGREGATE SUM子句相结合,它将产生请求的结果:

127.0.0.1:6379> sadd key1 a b c d
(integer) 4
127.0.0.1:6379> sadd key2 c
(integer) 1
127.0.0.1:6379> sadd key3 a c e
(integer) 3
127.0.0.1:6379> zunionstore result 3 key1 key2 key3 aggregate sum
(integer) 5
127.0.0.1:6379> zrevrangebyscore result +inf -inf
1) "c"
2) "a"
3) "e"
4) "d"
5) "b"
127.0.0.1:6379> zscore result c
"3"
127.0.0.1:6379> zscore result a
"2"
127.0.0.1:6379> zscore result e
"1"
127.0.0.1:6379> zscore result d
"1"
127.0.0.1:6379> zscore result b
"1"