句柄列表

4smxwvx5  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(332)

需要使用redis缓存大量的主数据(列表中有50k条记录)。但是应用程序将从主数据中检索单个记录。序列化列表中的50k条记录并将其存储在redis中,并且每次获取序列化字符串并使用linq反序列化到list对象和查询并返回一个数据,这有意义吗?e、 g.商店

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)

因为大字符串的反序列化对象效率不高。如果我在redis中一个接一个地存储数据,如果需要也需要作为一个整体存储,那么我担心会出现重复数据,将相同的数据存储两次。所以我更喜欢把5万作为一个整体来储存。
有什么建议吗?

fcipmucu

fcipmucu1#

用法:

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

强烈暗示这里发生了一些非常低效的事情。如果您希望能够通过一个键进行获取,这里更明显的模型是redis散列,使用 Id 以及每个值的序列化有效负载( HashSet[Async] ). 然后您可以单独获取、添加、更新或删除独立元素;如果需要,你仍然可以得到一切( HashGetAll[Async] / HashScan[Async] ).
您还可以单独存储每个项目( StringSet[Async] )使用id作为密钥的一部分,但是如果这样做,那么就没有好的机制来获取整个列表。

相关问题