6

我对 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;
}

帮我解决这个问题。

4

1 回答 1

7

我不知道你能做到这一点,但是如果你看一下这里的 CacheDependency 构造函数,你可以看到第二个参数是一个缓存键数组,所以如果这些缓存项中的任何一个发生变化,整个依赖项都会改变并且您的依赖项也将失效。

所以你的代码会是这样的:

String[] cacheKeys = new string[]{"cacheKey1","cacheKey2"};
var dep = New CacheDependency("", cacheKeys);

HttpRuntime.Cache.Add(itemDescriptor, ret, dep ...);
于 2011-10-03T07:57:12.043 回答