我对asp.net中可能的缓存依赖性感到有些困惑,我不知道如何使用它们。
我想以某种方式向HttpRuntime.Cache添加项目,如果我更改缓存中的其他元素,则元素应该无效。依赖关系应该由密钥定义。
我想要一个这样的函数:
public MyObject LoadFromCache(string itemDescriptor, IEnumerable<string> dependencies)
{
var ret = HttpRuntime.Cache[itemDescriptor] as MyObject;
if (ret == null)
{
ret = LoadFromDataBase(itemDescriptor);
//this is the part I'm not able to figure out. Adding more than one dependency items.
var dep = new CacheDependency();
dependencies.ForEach(o => dep.SomeHowAdd(o));
HttpRuntime.Cache.Add(
itemDescriptor,
ret,
dependencies,
System.Web.Caching.Cache.NoAbsoluteExpiration,
System.Web.Caching.Cache.NoSlidingExpiration,
Caching.CacheItemPriority.Normal,
null
);
}
return ret;
}
帮我解决这个问题。
答案 0 :(得分:7)
我不知道你能做到这一点,但是如果你看一下CacheDependency构造函数here,你会发现第二个参数是一个缓存键数组,所以如果这些缓存项中的任何一个改变了,整个依赖关系将被更改,您的依赖项也将失效。
所以你的代码应该是这样的:
String[] cacheKeys = new string[]{"cacheKey1","cacheKey2"};
var dep = New CacheDependency("", cacheKeys);
HttpRuntime.Cache.Add(itemDescriptor, ret, dep ...);