【问题标题】:Cache Files in ASP.NET MVC 4在 ASP.NET MVC 4 中缓存文件
【发布时间】:2013-03-20 18:55:24
【问题描述】:

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

然后我有一个动作 Get in a FileController 如下:

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

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

我应该使用 ETags 吗?怎么样?

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

谢谢,

米格尔

【问题讨论】:

  • “对于这些文件”?您能否更具体并解释更多以便更好地理解。
  • 基本上,当我访问 File/Get/c7eb1f1c-7cbe-46ed-8ace-05cdaa1bc46c 时,我将从数据库中加载 ID = c7eb1f1c-7cbe-46ed-8ace-05cdaa1bc46c 的文件并返回它。因此,当我说“针对这些文件”时,我的意思是针对此操作返回的所有文件。这是你问的吗?

标签: asp.net-mvc


【解决方案1】:

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

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

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

编辑:

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

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

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

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

'这会将缓存保存 120 秒,缓存的数据不应该保存在服务器上,它应该只保存在客户端浏览器上。'

更多关于探索缓存 in this article 和 this one。

【讨论】:

  • 当然,当使用数据库中的文件时,我需要小心缓存。我的想法是有一个短的缓存持续时间......大约 20 分钟。这将因项目而异。关于缓存我不能使用: [OutputCache(Duration = 600, Location = OutputCacheLocation.Client, VaryByParam="key"]?OutputCacheLocation.Client 不是将缓存文件保存在用户的浏览器缓存中吗?另一个选项是将缓存的文件保存在服务器文件夹中。不是吗?
猜你喜欢
  • 1970-01-01
  • 2014-02-28
  • 1970-01-01
  • 2020-06-07
  • 1970-01-01
  • 2013-01-08
  • 2014-01-18
  • 2012-12-22
  • 1970-01-01
相关资源
最近更新 更多