当前位置:  开发笔记 > 后端 > 正文

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

如何解决《Redis排序集与多个分数"列"》经验,为你挑选了1个好方法。

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

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

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

然而,我struggelig弄清楚,如何最好地保存属于的分数的百分比值100300.

我应该做这样的事情:

ZADD leaderboard:gamemode1 100 user1:29.45

其中:29.45是user1的分数的百分比100gamemode1?我认为这会让以后更新user1的gamemode1得分变得复杂.

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

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

有没有人对如何以一种好的方式构建它有任何意见?



1> Tw Bert..:

使用时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

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有