CacheDependency из 2 или более других элементов кэша. (ASP.NET MVC3) - PullRequest
6 голосов
/ 03 октября 2011

Я немного озадачен возможными зависимостями кэша в 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 Ответ

7 голосов
/ 03 октября 2011

Я не знал, что вы могли бы сделать это, но если вы посмотрите на конструктор CacheDependency здесь , вы увидите, что второй параметр - это массив ключей кеша, так что если любой из этих кешируется элементы изменяются, вся зависимость будет изменена, и ваш зависимый элемент также будет признан недействительным.

То есть ваш код будет выглядеть примерно так:

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

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