我在我的MVC3应用程序中使用System.Runtime.Caching MemoryCache来缓存很少更改,但经常访问数据。我设置了30分钟的绝对出口率。这非常有效。每30分钟,应用程序将缓存中的数据到期,然后逐出数据。
下次查询数据时,系统会从数据库重新加载缓存。
但是,如果数据库在缓存被逐出后暂时不可用怎么办?这将导致MemoryCache或数据库中没有可用的记录。将缓存过期是理想的,但在我确定可以重新加载之前不要逐出数据。如果我无法从数据库重新加载数据,我希望延长缓存的到期时间为...大约5分钟左右,并让它再试一次。最终数据库将回来。
策略是我宁愿拥有略微陈旧的数据,而不是根本没有数据。
我的问题是如何使用System.Runtime.Caching创建这样的缓存策略。我没有看到允许我在到期时阻止驱逐的事件。有什么想法吗?
答案 0 :(得分:0)
我认为您需要实现自己的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