1

在 MVC 4 / SQL 2012 / Entity Framework 5 应用程序上,我将所有文件上传到数据库到一个表中。

然后我在 FileController 中有一个动作 Get ,如下所示:

public partial class FileController : Controller {
  public virtual ActionResult Get(Guid key) {
    // Get file from database and return File
  }
}

在 MVC 中,对于这些文件,我有什么可用的缓存策略?

我应该使用 ETags 吗?如何?

有人可以帮我解决这个问题吗?

谢谢你,

米格尔

4

1 回答 1

2

我不认为使用 etags 是识别文件名的明智选择。由于使用它们有其优点和缺点,请阅读本文以了解有关 etag 的更多信息。

在您的情况下,有几种方法可以缓存结果集和文件。但是你需要注意这一点,在处理缓存 ORM 对象时,通常缓存的项目要么被删除,要么在你的文件发生一些变化时不更新,你需要自己处理这部分。无论哪种方式,您都可以设置需要刷新的缓存数据的持续时间。

我还没有遇到 .NET MVC4 中用于缓存数据的内置支持,无论如何,您始终可以编写自己的自定义 API 或使用/修改现有 API 来完成所需的任务。在这种情况下,您可能会发现这篇文章很有帮助。至于您使用 GUID 键作为文件名的情况,没有这样的规则说明 etags 和 uid 并排运行。您始终可以以您想要的方式缓存数据。看看史蒂夫的博客,他正在使用实体框架和 MVC。

编辑:

在客户端浏览器上缓存也是一块薄冰。这完全取决于类型、持续时间、敏感度,最重要的是用户,更不用说应用程序的性能了。正如我的好朋友曾经说过的那样:“直到你饿了才吃东西”......

要在客户端浏览器中设置缓存,您可以在 asp 中执行以下操作:

从下面提到的文章的例子中:

<%@ OutputCache Duration='120' Location='Client' VaryByParam='none' %>

“这会将缓存保存 120 秒,并且缓存的数据不应保存在服务器上,而应仅存储在客户端浏览器上。”

更多关于在这篇文章这篇文章中探索缓存的内容。

于 2013-03-19T12:16:06.797 回答