2012-01-09 38 views
1

Redis中的鍵/值對列表是否可能?或者可能是一組鍵值對。redis中的鍵值對列表

什麼,我想有是有專櫃如下日期時間戳列表:

1.1.12 -> 12 
1.2.12 -> 1 
1.3.12 -> 3 

我希望能夠用得到的範圍如下:

GET範圍1.1.12到1.2.12,我想結果爲13.

這可能嗎?

我應該使用哪種結構?

這樣做的正確方法是什麼?

可以說,我希望有時間標記爲一組,並且每個時間戳將如下指向3-4鍵值對:

1.1.12 -> error : 1 
      pass : 100 
1.2.12 -> error : 3 
      pass : 50 
1.3.12 -> error : 12 
      pass : 100 

做C#客戶端的支持呢?

我的主要目標是能夠存儲這個多值結構並能夠查詢。

回答

0

我的建議是將日期/時間字符串轉換爲類似「自紀元以來的秒數」(但如果您需要比1970年到2038年更大的範圍,則可能使用64位值,也許使用不同的值根據您的應用要求再次提供起點)。

從那裏我會使用zset(支持使用ZRANGE和ZRANGEBY Redis操作/命令獲取子集的「排序」或「得分」集)。從你的時代開始的秒數可以是分數,你的值可以是任何你喜歡的編碼值(包括JSON或BSON編碼的字典/散列表)。或者它可以是一個簡單的字符串,您可以將其用作Redis鍵(從而實現一個間接層--- zset充當Redis鍵的索引)。如果您選擇後一種方法,我建議您使用Redis存儲的整數來爲您的鍵提供唯一的序列ID ---以便在創建這些間接鍵/值的併發進程/節點的可能面上具有ACID屬性對)。

+0

好吧,沒問題,但我想能夠使用計數器。我在看zrange,但sortset是否支持增量操作? – DarthVader 2012-01-09 23:15:45

+0

一般而言,Redis不支持其集合,zsets或散列中包含的值的各種操作/命令。換句話說,您不能在zset中的某個分數或項目上使用INCR(您必須執行一項操作才能將項目從zset中移除,而另一項操作只需將創建的分數/值對添加回)。有一個HINCRBY操作,但除此之外,您可能需要在「鎖定」字段上使用HSETNX ...執行操作...然後HDEL鎖定。這種鎖定的值可能會促進陳舊的鎖定檢測。 – 2012-01-09 23:25:12

+0

那太過分了嗎?我很好奇,如果有更簡單的方法來做到這一點。也許是內置的功能。 – DarthVader 2012-01-09 23:45:56