如果我有两个排序集,其中不同的成员集具有不同的分数:
ZADD set1 10 "player1"
ZADD set1 15 "player2"
ZADD set1 5 "player3"
ZADD set2 30 "player1"
ZADD set2 22 "player3"
Run Code Online (Sandbox Code Playgroud)
我需要通过分组合并上述2台共同所有球员和总结他们的成绩,并得到这样的:
set3 40 "player1"
set3 15 "player2"
set3 27 "player3"
Run Code Online (Sandbox Code Playgroud)
我尝试的一种方法是将这些数据提取到Ruby对象中并执行分组逻辑.我正在寻找在Redis中做到这一点的方法.
你很幸运,因为redis支持开箱即用!
ZINTERSTORE目的地numkeys键[key ...] [WEIGHTS weight] [AGGREGATE SUM | MIN | MAX]
摘要:将多个有序集相交并将生成的有序集存储在新键中
所以在你的情况下:
ZINTERSTORE set3 2 set1 set2 AGGREGATE SUM
Run Code Online (Sandbox Code Playgroud)
瞧!set3包含总计得分的普通玩家:
127.0.0.1:6379> ZRANGE set3 0 -1 WITHSCORES
1) "player3"
2) "27"
3) "player1"
4) "40"
Run Code Online (Sandbox Code Playgroud)