簡體   English   中英

Redis 中的句柄列表

[英]Handle List in Redis

需要使用 Redis 緩存大量主數據(列表中的 50K 條記錄)。 但應用程序將從主數據中檢索單個記錄。 將列表中的 50K 記錄序列化並將其存儲在 Redis 中是否有意義,每次獲取序列化字符串並反序列化為 List 對象並使用 linq 查詢並返回一個數據? 例如商店

IDistributedCache _cache

// data is list<object> of size 50K
var jsonString = JsonConvert.SerializeObject(data);
await _cache.SetStringAsync(key, jsonString, options);

取回

var cachedItem = await _cache.GetStringAsync(key);
var result = JsonConvert.DeserializeObject<T>(cachedItem);
...
return result.where(x=>x.Id=id) 

因為大字符串的 DeserializeObject 效率不高。 如果我在redis中一一存儲,如果有要求也需要整體存儲,那么我擔心會有數據重復存儲兩次相同的數據。 所以這就是為什么我更喜歡整體存儲 50K。

有什么建議嗎?

用法:

var result = JsonConvert.DeserializeObject<T>(cachedItem);
...
return result.where(x=>x.Id=id) 

強烈表明這里正在發生一些非常低效的事情。 如果您希望能夠通過鍵獲取,這里更明顯的模型是 redis hash ,使用Id作為鍵,以及每個值的序列化負載 ( HashSet[Async] )。 然后您可以單獨獲取、添加、更新或刪除單個元素; 如果需要,您仍然可以獲取所有內容( HashGetAll[Async] / HashScan[Async] )。

您還可以使用 id作為 key 的一部分單獨存儲每個項目( StringSet[Async] ),但如果您這樣做,則沒有獲得整個列表的良好機制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM