Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用StackExchange.redis客户端更新redis缓存中的字典对象_C#_Caching_Redis_Stackexchange.redis_Azure Redis Cache - Fatal编程技术网

C# 使用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

我正在使用azure redis缓存和StackExchange.redis客户端访问它。我试图找出在redis中更新字典值的最佳方法

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非常感谢您对这一点的见解。谢谢。我喜欢这种方法。尽管在检索所有哈希字段和值时遇到问题。发布一个单独的问题。