2011-10-27 21 views
4

我剛開始使用Redis的,我已經打了有準備的NoSQL我的第一個攔路虎最新的一組/散列;以前我所知道的是sql服務器。正從Redis的

我明白一切都是基於關鍵價值的原則。但如何與有序的工作,例如:使用哈希集合

HMSET users:1 firstname 'james' lastname 'smith' created 'datetime.datatime.now' 

現在假設你添加第二個記錄,你會得到哈希集的長度(在這種情況下,我們應該說它的1返回值'x'),然後再添加一行

HMSET users:x firstname 'john' lastname 'smith' created 'datetime.datatime.now' 

你會如何得到最新的記錄?按日期?或者你可以只說'獲取記錄在-1的哈希集'?

可能我建議在有序集合更合適時使用哈希集?

我使用Python的,如果你將要檢查的SORT命令是很重要的

回答

2

如果存儲在紀元時間,您可以通過創建時間戳進行排序。

> HMSET users:1 firstname 'john' lastname 'smith' created 1319729878 
"OK" 
> HMSET users:2 firstname 'Jane' lastname 'Forbes' created 1319729910 
"OK" 
> sadd users 1 
true 
> sadd users 2 
true 
> sort users get users:*->firstname by users:*->created 
["john","Jane"] 
> sort users get users:*->firstname by users:*->created desc 
["Jane","john"] 

如果你願意,你可以得到多個鍵,SORT可能是大多數選項的命令,研究文檔。

關於鍵,你必須仔細考慮可能的密鑰重用(刪除,計數+ 1,插入會重用的關鍵?),所以我剛剛得到的關係型數據庫的鑰匙在我的項目。

+0

在'O(N + M * log(M))'中,'SORT'的限制是否還會運行? –

+0

我認爲它是'O(N)',因爲'M = 1'和'log(1)== 0'。 – Niloct

0

你應該使用一個有序set用戶ID,當你添加到組,添加用戶ID和時間戳作爲得分。

然後,您可以使用類似zrevrange的東西,以asc或desc順序將它們拉出,將其限制爲1條記錄以獲取最新的。

然後你可以從你的散列中獲得所有的值。