来自2个或更多其他缓存项的CacheDependency。 (ASP.NET MVC3)

时间:2011-10-03 07:47:33

标签: asp.net asp.net-mvc-3 caching cache-dependency

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

帮我解决这个问题。

1 个答案:

答案 0 :(得分:7)

我不知道你能做到这一点,但是如果你看一下CacheDependency构造函数here,你会发现第二个参数是一个缓存键数组,所以如果这些缓存项中的任何一个改变了,整个依赖关系将被更改,您的依赖项也将失效。

所以你的代码应该是这样的:

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

HttpRuntime.Cache.Add(itemDescriptor, ret, dep ...);