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

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

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

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

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

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

1 ответ

Решение

Я думаю, что вам нужно реализовать свой собственный 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

Другие вопросы по тегам