gpt4 book ai didi

c# - Redis中的处理列表

转载 作者:行者123 更新时间:2023-12-03 06:42:40 25 4
gpt4 key购买 nike

需要使用Redis缓存大量的主数据(列表中有5万条记录)。但是应用程序将从主数据中检索单个记录。将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哈希,使用 Id作为键,并对每个值进行序列化的有效负载( HashSet[Async])。然后,您可以分别获取,添加,更新或删除单个元素;您仍然可以根据需要获取所有内容( HashGetAll[Async] / HashScan[Async])。

您还可以使用id作为键的一部分单独存储每个项目( StringSet[Async]),但是如果这样做,那么就没有很好的机制来获取整个列表。

关于c# - Redis中的处理列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60485629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com