C# 使用StackExchange.redis客户端更新redis缓存中的字典对象
我正在使用azure redis缓存和StackExchange.redis客户端访问它。我试图找出在redis中更新字典值的最佳方法C# 使用StackExchange.redis客户端更新redis缓存中的字典对象,c#,caching,redis,stackexchange.redis,azure-redis-cache,C#,Caching,Redis,Stackexchange.redis,Azure Redis Cache,我正在使用azure redis缓存和StackExchange.redis客户端访问它。我试图找出在redis中更新字典值的最佳方法 public async Task<T> FetchAndCacheAsync<T>(string key, Func<Task<T>> retrieveData, TimeSpan absoluteExpiry) { T value; var ou
public async Task<T> FetchAndCacheAsync<T>(string key, Func<Task<T>> retrieveData, TimeSpan absoluteExpiry)
{
T value;
var output = await _cache.StringGetAsync(key);
if (output.HasValue)
{
value = _serializer.Deserialize<T>(output);
}
else
{
value = await retrieveData();
await _cache.StringSetAsync(key, _serializer.Serialize(value), absoluteExpiry);
}
return value;
}
public async Task FetchAndCacheAsync(字符串键、Func retrieveData、TimeSpan绝对过期)
{
T值;
var output=await\u cache.StringGetAsync(键);
if(output.HasValue)
{
value=\u序列化程序。反序列化(输出);
}
其他的
{
值=等待检索数据();
wait _cache.StringSetAsync(键,_serializer.Serialize(值),绝对过期);
}
返回值;
}
_上述代码段中的缓存类型为StackExchange.Redis.IDatabase
初始化时,我将dictionary对象存储为
FetchAndCacheAsync(“诊断”,()=>newdictionary())
我有一个函数,它将被频繁调用以更新dictionary对象中给定键的DateTime
问题:根据我对redis缓存的基本知识,我只能想到以下方法来更新存储在redis缓存中的字典的特定键值
var diagnostics = FetchAndCacheAsync("diagnostics", () => new Dictionary<Guid, DateTime>());
diagnostics[key] = value;
_cache.KeyDeleteAsync("diagnostics");
FetchAndCacheAsync("diagnostics", () => diagnostics);
var diagnostics=FetchAndCacheAsync(“diagnostics”,()=>newdictionary());
诊断[键]=值;
_cache.KeyDeleteAsync(“诊断”);
FetchAndCacheAsync(“诊断”,()=>diagnostics);
但我觉得这不太对。我相信一定有更好的办法。有什么建议吗?您看过Redis支持的哈希数据结构吗 HashGet(“诊断”,“我的钥匙”)
HashSet(“诊断”、“我的键”、“我的值”) @MarcGravel非常感谢您对这一点的见解。谢谢。我喜欢这种方法。尽管在检索所有哈希字段和值时遇到问题。发布一个单独的问题。