当我使用 zincrby 为键添加分数时,它会增加分数并将元素按字典顺序排列。
我能否按元素更新或添加的顺序获取此列表?
例如>
如果我执行
zincrby A 100 g
zincrby A 100 a
zincrby A 100 z
然后
zrange A 0 -1
那么结果就是
a->g->z
我想要的结果是这样的,
g->a->z
由于所有人的分数都相同,redis 将元素按字典顺序排列。有什么办法可以预防吗?
最佳答案
我不认为这是可能的,但如果你想保持分数的插入顺序,你应该像这样操作:
<score><timestamp>
代替
<score>
你必须定义一个好的时间记录(毫秒应该没问题)。然后你可以使用
zincrby A 100 * (10^nbdigitsformillis)
例如:
分数 = 100,时间戳为 1381377600 秒
给出:1001381377600
你将分数增加 200:1001381377600 + 200 * 10 = 3001381377600
小心使用 zset,因为它存储 double 值的分数(64 位,但只有 52 位可用于 int 值)所以不要存储超过 15-17 位数字。
如果您做不到(需要高时间戳精度和高分数精度),您将不得不管理两个 zset(一个用于实际分数,一个用于时间戳)并使用这两个值管理您的排名手册。
关于redis - zrange 中的字典顺序选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20000790/