没有滑动过期的ASP.NET MVC OutputCache有什么替代方法

时间:2016-05-27 21:42:35

标签: asp.net-mvc outputcache

我有一个带有IsDataModified()的公共静态/单例类,它受数据库,文件,用户类型,api等变化的影响,过程中只是返回一个bool变量。

输出数据的修改频率从一分钟到几个月不等,所以我不会使用滑动过期,而是让持续时间为MAX或无限。

但我正在寻找的是

  1. 列表项
  2. 浏览器请求
  3. MVC过滤器检查缓存是否丢失或IsDataModified()
    1. 更新缓存并返回
    2. 否则返回现有缓存
  4. 我尝试扩展OutputCache,将持续时间设置为非常大的数字,但是一旦页面被缓存,则不会触发过滤器。

    基本上我不希望指定的持续时间是缓存何时到期的决定因素,而IsDataModified()应该是决定因素。

    我认为一种方法是创建一个简单的过滤器并通过后面的代码使用输出缓存或类似对象,但我找不到OutputCacheAttribute给出缓存的viewresult。

    这可能吗?请建议。

1 个答案:

答案 0 :(得分:0)

所以我已经实现了一个建立在Redis之上的解决方案(memcache很麻烦)。我使用开源Redis输出缓存提供程序,它基本上创建一个对应于页面URL的密钥。每当为其中一个页面更改基础数据时,我会从Redis中删除该值,其中键会生成某些模式。 (我的数据类型有一个层次结构,所以当它是来自更新的父项的一段数据时,我删除了更多项目的缓存。)

使用类似的方法在数据更新时删除缓存页面可能也适合您。在旁注,我正在考虑尝试更改我的进程,以便我有一个后台服务,在更新数据时创建页面并替换缓存,以便第一个用户在页面第一次后没有慢响应从缓存中删除。