Redis:Group&将多个ZSET排序集合并为一个排序集

时间:2016-02-24 11:31:58

标签: sorting redis

如果我有两个排序集,其中不同的成员集具有不同的分数:

ZADD set1 10 "player1"
ZADD set1 15 "player2"
ZADD set1 5 "player3"

ZADD set2 30 "player1"
ZADD set2 22 "player3"

我需要通过将共同所有玩家分组并总结他们的得分来合并上述2套,并得到如下:

set3 40 "player1"
set3 15 "player2"
set3 27 "player3"

我尝试过的一种方法是将这些数据提取到Ruby对象中并执行分组逻辑。我正在寻找在Redis中做到这一点的方法。

1 个答案:

答案 0 :(得分:6)

你很幸运,因为redis支持开箱即用!

  

ZINTERSTORE目的地数字键[key ...] [权重] [AGGREGATE SUM | MIN | MAX]

     

摘要:将多个有序集相交并将生成的有序集存储在新密钥

所以在你的情况下:

ZINTERSTORE set3 2 set1 set2 AGGREGATE SUM
瞧,瞧! set3包含总计得分的普通玩家:

127.0.0.1:6379> ZRANGE set3 0 -1 WITHSCORES
1) "player3"
2) "27"
3) "player1"
4) "40"