【问题标题】:Update Dictionary object in redis cache using StackExchange.Redis client使用 StackExchange.Redis 客户端更新 Redis 缓存中的字典对象
【发布时间】:2015-07-22 16:55:11
【问题描述】:

我正在使用 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;
        }

上面代码sn-p中的_cache是​​StackExchange.Redis.IDatabase类型的。

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

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

我有一个函数会被频繁调用以更新字典对象中给定键的 DateTime。

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

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

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

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

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

【问题讨论】:

  • @MarcGravell 非常感谢您对此的见解。谢谢。

标签: c# caching redis stackexchange.redis azure-redis-cache


【解决方案1】:

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

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

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

IDatabase.HashSet("diagnostics", "MyKey", "My Value");

【讨论】:

  • 我喜欢这种方法。尽管在检索所有哈希字段和值时遇到问题。发布一个单独的问题。
猜你喜欢
  • 1970-01-01
  • 2016-12-17
  • 2020-12-01
  • 2017-04-29
  • 2021-09-13
  • 1970-01-01
  • 1970-01-01
  • 2021-09-16
  • 2021-03-11
相关资源
最近更新 更多