2011-04-25 45 views
5

假設我有一些消息存儲在哈希中。我有不同的散列(每個哈希代表一個新聞):Redis:我怎樣才能按鍵排序我的散列?

news:1 
news:2 
news:3 
... 

我想檢索所有的按鍵鍵命令那樣:

KEYS news:* 

密鑰是沒有排序的問題:

news:3 
news:1 
news:2 

我想找回正確的順序鍵列表。我不確定散列是我需要的結構。但是,根據redis documentation

Redis的哈希是字符串字段和字符串值之間的映射,所以他們是完美的數據類型來表示的對象(例如用戶擁有一批像姓名,年齡字段,等等):

將我的新聞對象存儲在哈希似乎是一個好主意。

有什麼建議嗎?

+0

如果你想要的鍵排序,你確定它是一個哈希,而不是你想要的列表? – Theo 2011-04-25 17:45:22

+0

@Theo,這是我的問題的一部分。見下面;) – 2011-04-25 17:51:27

回答

5

將Redis哈希視爲索引文檔。

HSET news:1 title levy_breaks 
HSET news:1 type breaking_news 
HSET news:1 byline alphazero 
HSET news:1 date 04:25:2011 
HSET news:1 content <the story> 

HSET news:2 ... 
.. 

在上文中,news:1是「散列鍵」,接着是「散列字段」,最後其相關聯的值。

這就是說,它好像您只是想你「散列鍵」進行排序。

使用MULTI/EXEC結構來設置一個新聞條目的所有字段(其中有n個字段),最後還加了哈希鍵 - 例如你的新聞項目 - 它到一個有序的集合。或者,您可以將它們添加到列表中,然後在該列表上使用SORT命令。

The Redis docs

+0

是否有可能檢測何時將密鑰添加到我的字典中,然後將此密鑰添加到我的排序列表中?如果沒有這個功能,我怎麼能確定我的排序列表在任何時候都包含我的散列表中的完整鍵?謝謝。 – 2011-04-25 17:10:07

+0

Redis確實支持pub/sub語義。因此,您可以在multi/exec塊中添加一條發佈消息:xxx key(例如,以「news:channel」爲例)。請參閱http://redis.io/topics/pubsub。不要問Redis的谷歌集團,因爲完成這項任務可能效率更高。 – alphazero 2011-04-25 22:15:55

+0

謝謝@alphazero! – 2011-04-26 06:54:37

2

你可以做什麼是存儲存在的新聞項目的集合或列表。例如,當你創建一個新的新聞項目時,讓我們說新聞:4,你可以將索引4添加到一個集合,比如說新聞,現在它會有[1,2,3,4]。

現在假設你的新聞哈希結構日期,作者。有了這個地方,你可以執行以下命令:

排序列表:獲取新聞* - > some_value_a - > * - > some_value_b

這是否有意義?希望它可以幫助

0

也許你可以試試HSCAN,它可以得到一個二維數組喜歡
[[key3, value3], [key1, value1], [key2, value2]]
其排序鍵的插入順序。 但它只能從Redis 2.8.0