将ActionResults作为缓存处理,ASP.NET MVC中的“静态内容”(4)

时间:2012-12-20 10:38:43

标签: asp.net asp.net-mvc caching http-caching

我有几个ActionMethods返回数据库中不经常更改的内容(例如:可用ZIP区域的多边形列表,以json形式返回;每年更改两次)。

我知道,有[OutputCache(...)]属性,但这有一些缺点(长时间客户端缓存不好;如果服务器/ iis /进程重新启动,服务器端缓存也会停止)

我想要的是,MVC将结果存储在文件系统中,计算散列,如果散列没有改变 - 它返回HTTP状态代码304 - >就像默认使用图像一样。

有人知道解决方案吗?

1 个答案:

答案 0 :(得分:0)

我认为尝试在文件系统上缓存数据是个坏主意,因为:

  1. 从文件系统读取数据要比从数据库中获取数据要快得多,即使你已经使用json格式也是如此。
  2. 您将添加大量逻辑来计算和比较哈希值。还要从文件中读取数据。这意味着新的错误,更复杂。
  3. 如果我是你,我会尽量保持简单。将数据存储在Application容器中。是的,每次应用程序启动时都必须重新加载它,但它根本不应该是一个问题,因为应用程序不应该经常重启。如果您有一个Web场,也可以考虑使用App Fabric之类的分布式缓存,以便不在不同服务器上的Application容器中提供不同的数据。

    还有一个重要的注意事项。缓存意味着非常快速的访问,你无法通过文件系统或数据库存储实现它,这是你应该考虑的内存存储。