我需要一个排行榜,用户存储得分和级别完整性的百分比.我只需要能够按分数排序并按分数排名.
使用Redis的排序集可以轻松存储用户的分数,如下所示:
ZADD leaderboard:gamemode1 100 user1 ZADD leaderboard:gamemode1 300 user2
然而,我struggelig弄清楚,如何最好地保存属于的分数的百分比值100
和300
.
我应该做这样的事情:
ZADD leaderboard:gamemode1 100 user1:29.45
其中:29.45
是user1的分数的百分比100
的gamemode1
?我认为这会让以后更新user1的gamemode1得分变得复杂.
或者我应该创建一个哈希表作为簿记机制,存储所有用户的分数和所有游戏模式的百分比?
我对哈希表方法的关注是,如果我想用他们的分数和百分比值来显示约50个用户的排行榜,那么在拉出top50分数之后,我将不得不查询该哈希表50次以获得百分比ZRANGE
.
有没有人对如何以一种好的方式构建它有任何意见?
使用时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