我是Redis的新手,我正在尝试为游戏中的不同级别创建排行榜(例如,游戏可能有20个级别,我想创建20个不同的排行榜(。
阅读AWS的文档,排序集似乎是可行的,但我需要创建20个不同的弹性缓存实例吗?
或者我会做一些类似ZADD排行榜的事情:1,ZADD:排行榜:2,其中1或2对应于游戏的id?
如果这是一个愚蠢的问题,我深表歉意,因为这是我第一次尝试Redis。
您不需要创建20个不同的ElastiCache实例,只需使用一个即可(您需要根据大小、网络等决定实例类型(。
每当您需要将新用户添加到某个级别(如果他存在,则更新分数(时,您需要使用该级别的密钥、用户和分数(域中的分数(执行zadd
。zadd还支持同时设置多个用户分数。
> ZADD leaderboard:1 154 "user273"
(integer) 1
> ZADD leaderboard:2 12 "user786"
(integer) 1
> ZADD leaderboard:3 221 "user:6817" 912 "user:21233"
(integer) 2
当user:123
以15
的分数进入排行榜,然后他获得19
时,当你执行zadd
时,他的分数(分(将被覆盖。
你会有一个排序的集合,里面有很多独特的用户及其相应的分数。这里的棘手部分;如果你要获得前5名用户,那么你需要使用zrevrange
而不是zrange
,因为当你的分数更高时,你的排名会更小(数字顺序(。在这种情况下
zrevrange leaderboard:1 0 4 withscores
将为您提供级别1的前5名用户。withscores
是可选的。