System.Runtime.Caching Absolute Expiration высвобождает данные в соответствии с планом, но как реализовать неисчерпающую стратегию данных с истекающим сроком действия? - PullRequest
1 голос
/ 28 февраля 2012

Я использую System.Runtime.Caching MemoryCache в своем приложении MVC3 для кэширования редко изменяемых, но часто используемых данных.Я установил абсолютное выдох 30 минут.Это прекрасно работает.Каждые 30 минут приложение истекает данные в кеше, а затем удаляет данные.

При следующем запросе данных система перезагружает кэш из базы данных.

Однако, что если база данных была временно недоступна после удаления кэша?Это приведет к тому, что записи из MemoryCache или базы данных не будут доступны.Было бы идеально, чтобы истечь срок действия кэша, но НЕ выселять данные, пока я не буду уверен, что смогу перезагрузить его.Если я не могу перезагрузить данные из базы данных, я бы хотел продлить срок действия кэша, скажем, примерно на 5 минут и повторить попытку.В конце концов база данных вернется.

Стратегия заключается в том, что я предпочел бы иметь немного устаревшие данные, а не вообще никаких данных.

Мой вопрос заключается в том, как мне создать такую ​​стратегию кэширования с использованием System.Runtime.Caching.Я не вижу события, которое позволило бы мне предотвратить выселение во время истечения срока действия.Есть идеи?

1 Ответ

0 голосов
/ 28 февраля 2012

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

http://msdn.microsoft.com/en-us/library/system.web.caching.outputcacheprovider.aspx

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

http://msdn.microsoft.com/en-us/library/system.web.caching.sqlcachedependency.aspx

...