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

Soo*_*ead 6 asp.net caching cache-dependency asp.net-mvc-3

我对asp.net中可能的cachedependencies有点疑惑,我不知道如何使用它们.

我想以某种方式向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;
}
Run Code Online (Sandbox Code Playgroud)

帮助我解决这个问题.

Phi*_*ove 7

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

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

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

HttpRuntime.Cache.Add(itemDescriptor, ret, dep ...);
Run Code Online (Sandbox Code Playgroud)