Redis排序集有多个分数"列"

时间:2014-04-21 17:52:38

标签: redis

我需要一个排行榜,其中用户存储得分和级别完整性的百分比。我只需要能够按分数排序并按分数排名。

使用Redis的排序集a可以轻松存储用户的分数,如下所示:

ZADD leaderboard:gamemode1 100 user1
ZADD leaderboard:gamemode1 300 user2

然而,我很想知道如何最好地存储属于100300分数的百分比值。

我应该这样做:

ZADD leaderboard:gamemode1 100 user1:29.45

:29.45100中user1的得分gamemode1的百分比?我认为这会让以后更新user1的gamemode1得分变得复杂。

或者我应该创建一个哈希表作为簿记机制,存储所有用户的分数和所有游戏模式的百分比?

我对哈希表方法的关注是,如果我想用他们的分数和百分比值显示约50个用户的排行榜,那么在拉动top50分数之后,我将不得不查询该哈希表50次以获得百分比与ZRANGE

有没有人对如何以良好的方式构建这个有任何意见?

1 个答案:

答案 0 :(得分:7)

使用Sorted Sets时,请记住它有成员字符串unicity。

这意味着:

ZADD game1 100 user1
ZADD game1 90 user1

只留下90 user1

只是单挑,我认为你已经覆盖了这一点。

要存储百分比,您可以使用分数的小数部分:

ZADD leaderboard:gamemode1 100.0995 user1
ZADD leaderboard:gamemode1  90.0850 user2

上面,我使用小数部分作为百分比,如下所示:0.0995 = 99.5%。

您还可以仅将分数用于分数,并序列化成员字符串:

ZADD leaderboard:gamemode1 100 [serialized dictionary/dataset]
ZADD leaderboard:gamemode1  90 [serialized dictionary/dataset]

如果使用JSON或MsgPack,则始终可以使用服务器端脚本来更新序列化字符串中的某些数据。

我不建议为这个简单的场景记账,至少在这个阶段不行。您可以随时实施。

希望这有帮助,TW