1

我想更新存儲在redis中的多個服務堆用戶會話。我想返回所有具有自定義屬性設置爲特定值的會話,然後我可以處理它們。目前最好的解決方案,我已經返回所有的密鑰,如:基於屬性值檢索對服務堆棧redis會話對象的選擇

List<string> sessionkeys = redis.SearchKeys("urn:iauthsession:*"); 

我想這不會很好地擴展。我想做類似的事情:

List<string> sessionkeys = redis.AllKeys.Where(x=>x.ParentId == 3); 

這是可能的與redis,如果是這樣,理想情況下使用標準庫與ServiceStack。

回答

1

而不是SearchKeys您希望使用較新的Redis Scan API's,它允許您遍歷遊標中的鍵。

Redis值是blobbed,沒有索引,所以沒有太多的機會來優化這個。最有效的方法是使用自定義的server-side LUA operation來檢查這些值,這將最小化發送到客戶端的請求和負​​載的數量。

Redis嵌入式版本的LUA具有可用於反序列化JSON值的cjson,Lua guide for Redis users有一些使用此的例子。

由於Redis不支持服務器端查詢或索引,因此Redis的方式是預先保存需要查詢的查詢並在保存會話時維護自定義索引,以及如何維護自定義索引的一些信息Redis的地址爲:

在ServiceStack您可以覆蓋在你的APPHOST OnSaveSession()在一個會話保存它被調用。

+0

完美地回答了我的問題。還有我的下一個問題! – richardwhatever 2015-02-12 06:54:55