使用 StackExchange.Redis 客户端更新 Redis 缓存中的字典对象
Update Dictionary object in redis cache using StackExchange.Redis client
我正在使用 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("diagnostics", () => 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("diagnostics", "MyKey");
IDatabase.HashSet("diagnostics", "MyKey", "My Value");
我正在使用 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("diagnostics", () => 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("diagnostics", "MyKey");
IDatabase.HashSet("diagnostics", "MyKey", "My Value");