2015-12-29 41 views
2

我正在使用stackexchange.redis api來訪問簡單的字符串列表到Redis中。現在我需要在redis中添加/更新/刪除/獲取列表 然後訪問諸如lst.Find(h => h.Id ==「1」)的對象e.t.c 基本上是一個操作ReferenceType對象的功能。 我找不到它在那裏建立。任何人都知道我該怎麼做?Api保存/選擇引用類型列表到redis

回答

2

這是一個廣泛的主題。在Redis中存儲複雜對象有兩種方法:序列化和哈希。序列化是不透明的blob - 只有(通常)由調用應用程序解釋。我在這github issue討論這個,我懷疑你也是。哈希是單個鍵內的名稱/值對(有點像動態數據庫列,... -ish) - 這允許獲取屬性的子集等。

請注意,列表中不能有哈希值。

接下來我們有一個id查找的問題。如果您使用Redis列表,則只能按位置獲取:不是由某個屬性獲取。我懷疑你也在用RDBMS護目鏡思考Redis,但是Redis根本就不能這樣工作。

就我個人而言,每個項目都有一個按鍵,由主鍵命名。例如鍵/user/12345。然後提取(或更新)用戶12345是通過名稱讀取(或寫入)密鑰的情況。 Redis本身不支持其他索引,但您可以使用附加的存儲手動實現索引。例如,/users/ssid中的散列將whatever572618映射到具有該id的用戶。

Josiah Carlson的「Redis in Action」一書可能對您瞭解如何使用Redis有用。

+0

謝謝馬克。現在我正在考慮你對MyListName/MyID這樣的鍵的建議(例如SmsInList/1)。我認爲簡單的StackExchangeRedis實現可能就足夠了。唯一的問題是我在考慮如何處理那些我正在考慮清單的情況。爲此我想我現在必須抓取所有以「MyListName /」後綴開頭的密鑰並清空它。 再次感謝 –

+0

@Kamran注意:你應該避免使用「鍵」或「掃描」的誘惑。您可以存儲Redis的所有ID並列舉出來,但坦率地說,我首先會試圖挑戰這種需求。或者我可能會考慮將它們全部放在特定的數據庫編號中,並使用「flushdb」一次清除整個數據庫編號。 –

+0

我曾經在一個基於StackExchange.Redis的庫[CachingFramework.Redis](https://github.com/thepirat000/CachingFramework.Redis/blob/master/COLLECTIONS.md)上進行過抽象序列化,暴露了一個[ API](https://github.com/thepirat000/CachingFramework.Redis/blob/master/COLLECTIONS.md)用於redis列表和哈希,如.NET'IList <>'和'IDictionary <,>'對象。它可能會有所幫助。 – thepirat000