2013-11-15 58 views
0

當我爲使用鋅的密鑰添加分數時,它會增加分數並將元素按字典順序排列。zrange中的字典順序選項?

我可以得到這個列表的順序,其中的元素更新或添加?

例如>

如果我執行

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

然後

zrange A 0 -1 

那麼結果是

a->g->z 

這裏,我想爲了條目結果這樣做,

g->a->z 

由於得分對所有人來說都是相同的,所以redis將按照字典順序排列元素。有什麼辦法可以預防它嗎?

回答

1

我不認爲這是可能的,但如果你想保持與插入得分的順序,你應該處理這樣的事情:

<score><timestamp> 

,而不是

<score> 

你將不得不定義一個好的時間記錄(millis應該沒問題)。然後你可以使用

zincrby A 100 * (10^nbdigitsformillis) 

例如:

得分= 100個時間戳是1381377600秒

這給:1001381377600

您增量由200比分:1001381377600 + 200 * 10 = 3001381377600

要小心zset,因爲它存儲雙值的分數(64位,但只有52可用於int值),所以不要存儲e超過15-17位數字。

如果你不能做到這一點(需要很好的時間戳精度和很高的分數精度),你將不得不管理兩個zsets(一個用於實際分數,一個用於時間戳)並且用這兩個值管理排名手冊。

+0

感謝您的回覆,存儲分數(如100 *(10^nbdigitsformillis))將在將來的使用情況中顯示該分數時生效。基本上沒有理解公式,這可能是一個愚蠢的問題,但它將如何重新計算得分? – Pranav

+0

我添加了一個編輯。 – zenbeni

+0

這很有幫助,我已經執行了很多密集的任務,可能無法添加更多的工作,分數可以達到6位數,這對我很有幫助,非常感謝。可能會再次懷疑你! – Pranav