2013-10-18 157 views
0

什麼是在Redis中保留大型列表(例如10K項目)的最佳方式,我也希望通過密鑰高效地檢索項目。REDIS:隨機訪問列表

看起來Redis沒有與Java的OrderedHashMap等價的數據結構,因此可能需要維護一個集合和一個列表並確保它們保持同步。

+0

什麼是項目? – raffian

+0

一個例子就像書籤一樣。我想保留用戶的書籤列表,但同時檢測用戶是否已經爲給定的項目添加了書籤。通過定期列表,該檢查將是O(N)操作。 – mahemoff

回答

1

使用排序集;

添加一些書籤;使用當前時間score按時間順序進行排序:

> zadd bookmarks 123 "bk1" 
> zadd bookmarks 456 "bk2" 
> zadd bookmarks 789 "bk3" 
> zadd bookmarks 999 "bk4" 

爲了得到一個書籤,你需要的指數第一:

> zrevrange bookmarks 3 3 
> "bk3" 

> zrank bookmarks "bk3" 
> "3" 

...然後通過指數拉書籤

如果你不想使用時間戳,你可以按照字典順序使用「1」對書籤進行排序:

> zadd bookmarks 1 "link_xyz" 
> zadd bookmarks 1 "link_abc" 
> zadd bookmarks 1 "link_foo" 

> zrange bookmarks 0 -1 

1) "link_abc" 
2) "link_foo" 
3) "link_xyz" 

索引查找是O(log(n)),添加到該O(log(n)+1)按索引拉單個成員;列表優於O(n)。另外,如果您添加相同的書籤兩次,redis將自動替換之前的成員,這樣可以避免重複。

希望它有幫助,