1

我在 MVC3 应用程序中使用 System.Runtime.Caching MemoryCache 来缓存很少更改但经常访问的数据。我将absoluteExpiration设置为30分钟。这很好用。每隔 30 分钟,应用程序会使缓存中的数据过期,然后驱逐数据。

下次查询数据时,系统会从数据库中重新加载缓存。

但是,如果缓存被驱逐后数据库暂时不可用怎么办?这将导致 MemoryCache 或数据库中没有可用的记录。理想的做法是使缓存过期,但在确定可以重新加载数据之前不要驱逐数据。如果我无法从数据库重新加载数据,我想将缓存的过期时间延长 5 分钟左右,然后再试一次。最终数据库将恢复。

策略是我宁愿拥有稍微陈旧的数据,也不愿根本没有数据。

我的问题是我应该如何使用 System.Runtime.Caching 创建这样的缓存策略。我没有看到允许我在到期时防止被驱逐的事件。有任何想法吗?

4

1 回答 1

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

于 2012-02-28T08:21:34.687 回答