zrange中的词典顺序选项?

时间:2013-11-15 12:10:43

标签: redis node-redis phpredis

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

我是否可以按顺序获取此列表,其中元素已更新或添加?

e.g>

如果我执行

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

然后

zrange A 0 -1

然后结果是

a->g->z

其中,我希望结果按顺序排列,

g->a->z

由于得分对所有人来说都是一样的,所以redis将元素放在字典顺序中。有什么办法可以阻止吗?

1 个答案:

答案 0 :(得分:1)

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

<score><timestamp>

而不是

<score>

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

zincrby A 100 * (10^nbdigitsformillis)

例如:

得分= 100,时间戳为1381377600秒

这给出:1001381377600

你的得分为200分:1001381377600 + 200 * 10 = 3001381377600

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

如果你不能那样做(需要很好的时间戳精确度和高分精度),你将需要管理两个zsets(一个用于实际得分,一个用于时间戳)和管理你的排名手册以及两个值。