0

当我使用 zincrby 为键添加分数时,它会增加分数并将元素按字典顺序排列。

我可以按更新或添加元素的顺序获取此列表吗?

例如>

如果我执行

zincrby A 100 g
zincrby A 100 a
zincrby A 100 z

接着

zrange A 0 -1

那么结果是

a->g->z

在哪里,我希望结果按照条目的顺序排列,

g->a->z

由于所有分数都相同,redis 将元素按字典顺序排列。有什么办法可以预防吗?

4

1 回答 1

1

我不认为这是可能的,但如果你想保持分数的插入顺序,你应该操纵这样的事情:

<score><timestamp>

代替

<score>

您将必须定义一个良好的时间记录(毫秒应该没问题)。然后你可以使用

zincrby A 100 * (10^nbdigitsformillis)

例如:

分数 = 100,时间戳为 1381377600 秒

这给出了:1001381377600

您将分数增加 200:1001381377600 + 200 * 10 = 3001381377600

小心 zset 因为它存储带有双值的分数(64 位,但只有 52 位可用于 int 值)所以不要存储超过 15-17 位数字。

如果您不能这样做(需要出色的时间戳精度和出色的分数精度),则必须管理两个 zset(一个用于实际分数,一个用于时间戳)并使用这两个值管理您的排名手册。

于 2013-11-15T16:21:57.763 回答