c# - 使用 StackExchange.Redis 客户端更新 Redis 缓存中的字典对象

标签 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 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;
        }

上述代码片段中的_cache是​​StackExchange.Redis.IDatabase类型。

在初始化时,我将字典对象存储为

FetchAndCacheAsync("诊断", () => new Dictionary());

我有一个将被频繁调用的函数来更新字典对象中给定键的日期时间。

问题:以我对redis缓存的基本了解,我只能想到以下方法来更新存储在redis缓存中的字典的特定键值。

var diagnostics = FetchAndCacheAsync("diagnostics", () => new Dictionary<Guid, DateTime>());

diagnostics[key] = value;
_cache.KeyDeleteAsync("diagnostics");

FetchAndCacheAsync("diagnostics", () => diagnostics);

但我觉得不对。我相信一定有更好的方法来做到这一点。有什么建议吗?

最佳答案

你看过Redis支持的Hash数据结构吗?

http://redis.io/topics/data-types-intro#hashes

IDatabase.HashGet("诊断", "MyKey");

IDatabase.HashSet("诊断", "MyKey", "我的值(value)");

关于c# - 使用 StackExchange.Redis 客户端更新 Redis 缓存中的字典对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30180334/

相关文章:

c# 业务应用程序中的不可变类

c# - Office 365 SMTP 开始触发 net_io_connectionclosed

mysql - 如何追踪 Drupal max_allowed_pa​​cket 错误?

.net - 如何创建行特定的 sql 缓存依赖项?

python - flask 缓存 : list keys based on a pattern?

kubernetes - KUBERNETES 上没有持久性的 REDIS 集群

C#:数据表线程安全问题

c# - 获取列表

spring - 如何将 Spring Data 用于 Redis 序列化程序?

ruby - Redis 不会使用 Resque Task 安装