数据库缓存失效策略和时序

时间:2015-02-06 14:16:16

标签: sql asp.net caching

如果您使用以下策略:

  • 用于存储SQL查询的应用程序级缓存(如System.Web.Caching.Cache)。
  • 每个缓存条目都存储有与所返回行的主键相关联的CacheDependancy。
  • 数据库侦听器,当侦听依赖于更改的行时,该侦听器侦听更改并使特定查询的高速缓存无效。

这很有效,但缓存显然不会立即失效,这在一些情况下是有问题的。

一个例子是用户将产品添加到购物车。用户将被带到显示购物车内容的新页面。在这种情况下,缓存不会在时间上失效,并且新添加的项目不会出现。如果你重新加载页面,那么监听器就有时间运行,项目就在那里。

我正在努力寻找一种通用的解决方案。这是缓存失效的缺点还是我错过了什么?

1 个答案:

答案 0 :(得分:1)

所有缓存方案的通用解决方案都不太可能,您可能会更好地使用常见方法(如Session / HttpContext)为您的应用程序定制解决方案,具体取决于您需要缓存对象的持续时间。

像购物车项目这样的东西可以放入会话中,仅在请求持续时间内缓存的项目可以使用HttpContext.Current.Items等。更常见的是,CacheDependency用于更多不经常更改的静态项目,因此延迟会无所谓。