Redis 中的句柄列表
Handle List in Redis
需要使用 Redis 缓存大量主数据(列表中有 50K 条记录)。但应用程序将从主数据中检索单个记录。序列化列表中的 50K 记录并将其存储在 Redis 中并且每次获取序列化字符串并反序列化为 List 对象并使用 linq 和 return 一个数据进行查询是否有意义?
例如
店铺
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]
)。
您还可以 单独存储每个项目 (StringSet[Async]
) 使用 id 作为键的一部分 ,但是如果你这样做,那么就没有好的机制来获取整个列表。
需要使用 Redis 缓存大量主数据(列表中有 50K 条记录)。但应用程序将从主数据中检索单个记录。序列化列表中的 50K 记录并将其存储在 Redis 中并且每次获取序列化字符串并反序列化为 List 对象并使用 linq 和 return 一个数据进行查询是否有意义? 例如 店铺
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]
)。
您还可以 单独存储每个项目 (StringSet[Async]
) 使用 id 作为键的一部分 ,但是如果你这样做,那么就没有好的机制来获取整个列表。