当我使用 zincrby 为键添加分数时,它会增加分数并将元素按字典顺序排列。
我可以按更新或添加元素的顺序获取此列表吗?
例如>
如果我执行
zincrby A 100 g
zincrby A 100 a
zincrby A 100 z
接着
zrange A 0 -1
那么结果是
a->g->z
在哪里,我希望结果按照条目的顺序排列,
g->a->z
由于所有分数都相同,redis 将元素按字典顺序排列。有什么办法可以预防吗?
当我使用 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 因为它存储带有双值的分数(64 位,但只有 52 位可用于 int 值)所以不要存储超过 15-17 位数字。
如果您不能这样做(需要出色的时间戳精度和出色的分数精度),则必须管理两个 zset(一个用于实际分数,一个用于时间戳)并使用这两个值管理您的排名手册。