【发布时间】:2018-03-12 11:17:49
【问题描述】:
前言
我有一个简单的接口,它假设键之间的依赖关系。 它的两种方法是:
-
Remove(string key)- 从缓存中删除单个键。 -
RemoveDependentsOf(string baseKey)- 删除baseKey和baseKey的所有依赖项。baseKey的依赖项在Redis set中指定。因此,为了删除
baseKey的所有依赖项,我必须读取baseKey的集合,然后循环它们以删除它们。
问题
我阅读了 StackExchange.Redis 文档,因此我了解了他们传奇的流水线支持,并且根据他们的文档,以下代码应该非常有效。
但是,我似乎无法理解库如何通过管道传输KeyDelete 命令因为无论密钥是否被删除,该方法都会返回一个布尔值。
所以在执行第二个KeyDelete 命令之前,应该已经发送了第一个命令并收到了它的响应(这样效率不高)。
- 我在这里缺少什么?
- 我应该如何编写下面的代码?
public void Remove(string key)
{
_redis.KeyDelete(key);
}
public void RemoveDependentsOf(string key)
{
Remove(key);
var setKey = GetDependencySetKey(key);
RedisValue[] dependents = _redis.SetMembers(setKey);
foreach (var dependentKey in dependents)
{
RemoveDependentsOf(dependentKey);
}
// This is the way to remove the whole set
_redis.KeyExpire(setKey, TimeSpan.Zero);
}
【问题讨论】:
标签: c# .net redis stackexchange.redis