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

时间:2014-10-07 02:42:30

标签: redis numerical sortedset

最近,我使用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"

1 个答案:

答案 0 :(得分:1)

当排序集的成员具有相同的分数时,它们按字典顺序排序。没有简单的方法让他们以不同的方式订购AFAIK,但您可以轻松地在客户端进行排序。或者,您可以编写一个简短的Lua脚本,在服务器上为您执行此操作。

有一种轻微的hackish方式,你可以摆脱你想要的东西,而不采取上述方法。根据您提供的示例和ssuming,排名和用户ID都是整数,您可以使用两者的组合,如下所示:

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

这样您就可以使用范围对每个等级进行“数字”排序(即使用zrangebyscore game_rank 550000000 559999999)。