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