当我使用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将元素放在字典顺序中。有什么办法可以阻止吗?
答案 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(一个用于实际得分,一个用于时间戳)和管理你的排名手册以及两个值。