AppFabric и CachingPolicy/ChangeMonitors

Мы изучаем возможность перехода на распределенный кэш с помощью Windows AppFabric. Наше приложение ASP.NET 4.0 в настоящее время имеет реализацию кэша, использующую MemoryCache.

Одной из ключевых особенностей является то, что при добавлении элементов в кеш включается CacheItemPolicy, который содержит ChangeMonitor:

 CacheItemPolicy policy = new CacheItemPolicy();
 policy.Priority = CacheItemPriority.Default;
 policy.ChangeMonitors.Add(new LastPublishDateChangeMonitor(key, item, GetLastPublishDateCallBack));

Монитор изменений внутренне использует таймер для периодического запуска делегата, переданного ему, что обычно является методом получения значения из БД для сравнения.

Затем политика и ее монитор изменений включаются при добавлении элемента в кеш:

Cache.Add(key, item, policy);

Ранний взгляд на класс AppFabric DataCache, по-видимому, указывает на то, что в то время как Timespan может быть включен при добавлении элементов в кеш, сам CacheItemPolicy не может быть включен.

Есть ли другой способ реализовать ту же функциональность типа ChangeMonitor в AppFabric. Уведомления наверное?

Ваше здоровье

Нил


person Neil    schedule 01.02.2013    source источник
comment
Я не рискну ответить, так как я уже год как не работаю с AppFabric, но в то время ответ, который я нашел, был отрицательным. Вы не могли привязать событие к элементу в кеше, чтобы увидеть, когда что-то изменилось. Хотя, возможно, более новая версия поддерживает это.   -  person ryan1234    schedule 01.02.2013


Ответы (1)


В компьютерных науках есть только две сложные проблемы: недействительность кеша, присвоение имен объектам и ошибки, связанные с несовпадением единиц.
Фил Карлтон.

К сожалению, AppFabric не поддерживает такого рода мониторинг для аннулирования кэшированного элемента, а также не поддерживает такие вещи, как SqlCacheDependency.

Однако в AppFabric 1.1 появилась поддержка сквозного чтения и отложенной записи. Отложенная запись означает, что ваше приложение сначала обновляет кэшированные данные, а не базовую базу данных, так что кэш всегда содержит самую последнюю версию (и, следовательно, базовые данные не нужно отслеживать); затем кеш асинхронно обновляет базовую базу данных. Чтобы реализовать сквозное чтение/отложенную запись, вам потребуется создать объект, наследуемый от DataCacheStoreProvider (MSDN) и напишите методы чтения, записи и удаления, которые понимают структуру вашей базы данных и способы ее обновления.

person PhilPursglove    schedule 06.02.2013