小编典典

Redis SortedSet:当两个值具有相同分数时,如何以数字顺序而不是字母顺序获取值?

redis

最近,我正在使用redis SortedSet为每个用户实现游戏等级,但是我遇到了一个问题:

zadd game_rank 55 6435
zadd game_rank 55 6088561
zadd game_rank 55 608825
zrange game_rank 0 -1

结果是:

"60882561"
"608852"
"6435"

我想知道在相同分数中是否可以按数字顺序获取值:

"6435"
"608852"
"60882561"

阅读 935

收藏
2020-06-20

共1个答案

小编典典

当已排序集合的成员具有相同分数时,将按字典顺序对其进行排序。没有直接的方法可以使它们以不同的顺序排列,但您可以轻松地在客户端进行排序。或者,您可以编写一个简短的Lua脚本,在服务器上为您完成此任务。

您可以采用一种有点怪异的方式来摆脱想要的东西,而无需采用上述方法。根据您提供的示例,并假设rank和user
id都是整数,则可以使用将两者结合在一起的得分,如下所示:

zadd game_rank 550006435 6435
zadd game_rank 556088561 6088561
zadd game_rank 550608825 608825

这将使您可以进行范围调整, 并且 可以对每个等级进行“数字”排序(即,使用zrangebyscore game_rank 550000000 559999999)。

2020-06-20