【问题标题】:Where to cache in ASP.net MVC 5 server or client在 ASP.net MVC 5 服务器或客户端中缓存的位置
【发布时间】:2017-09-25 08:52:26
【问题描述】:

我正在阅读 ASP.Net MVC 5 中的教程,并了解了缓存。但我不明白是什么决定了我应该缓存在客户端还是服务器。

这里是代码sn-p。

对于客户:

[OutputCache(Duration = 86400, Location = OutputCacheLocation.Client)]
public ActionResult SelectLocation()
{
}

对于服务器:

[OutputCache(Duration = 86400, Location = OutputCacheLocation.Server)]
public ActionResult SelectLocation()
{
}

问题:谁能告诉我什么时候应该应用客户端缓存以及什么时候应该使用服务器缓存。以及我应该寻找的不利因素或任何后果?

【问题讨论】:

  • 如果您的系统有敏感数据,我不建议以这种方式使用缓存。对于客户端缓存,即使会话超时,数据仍将在浏览器上可用。

标签: c# asp.net asp.net-mvc caching asp.net-mvc-5


【解决方案1】:

关于OutputCache,“客户端”缓存仅仅意味着缓存控制标头和/或过期标头将与响应一起发送,表明客户端可以缓存文档。通常,客户端,特别是如果它是一个 Web 浏览器,会选择这样做。如果再次需要相同的资源,它就不需要发出新的请求。但是,浏览器仍可能偶尔发出 HEAD 请求,以检查是否有新版本的资源。

“服务器”缓存意味着,对于OutputCache,服务器将在本地缓存响应,通常在内存中。这意味着只要缓存仍然有效,服务器实际上不会再次渲染该操作,而是只会提供缓存的资源。

那么,两者之间的主要区别在于,服务器缓存将用于对该资源的所有请求,而不管当前是哪个客户端发出请求,而客户端缓存显然仅限于该特定客户端.服务器不需要为那个客户端再次呈现动作,但会为下一个出现的客户端呈现。

但是,默认值为Any,其中包括服务器和客户端缓存(以及其他位置)。换句话说,服务器和客户端缓存不是相互排斥的,通常您会同时做这两个操作以最大限度地减少服务器需要做的工作和它需要响应的请求数量。

【讨论】:

    【解决方案2】:

    看看here。解释的很好

    默认情况下,内容缓存在三个位置:Web 服务器、任何代理服务器和用户的浏览器。您可以通过更改 location 参数来控制内容的缓存位置。当您在服务器上缓存时,每个用户都会收到相同的内容,而当它只是客户端时,缓存的内容因用户而异。

    location 参数具有适用于大多数场景的默认值 Any。但有时在某些情况下,您需要对缓存数据进行更多控制。

    假设您要缓存登录的使用信息,那么您应该在客户端浏览器上缓存数据,因为这些数据是特定于用户的。如果您将这些数据缓存在服务器上,所有用户都会看到相同的错误信息。

    你应该在服务器上缓存所有用户共有的敏感数据。

    【讨论】:

      【解决方案3】:

      一种观点可以通过缓存失效场景。在客户端缓存时,您需要调整客户端命中的 URL 以避免缓存命中/强制重新计算响应。在服务器端缓存时,您可能更容易使缓存的内容无效。看到这个问题:How to programmatically clear outputcache for controller action method

      【讨论】:

        【解决方案4】:

        https://msdn.microsoft.com/en-us/library/system.web.ui.outputcachelocation(v=vs.110).aspx中所述

        客户端将指示浏览器在它自己的缓存中缓存 html。 优点:速度更快,因为它缓存在浏览器上,不占用服务器内存。 缺点:它依赖于用户浏览器设置(缓存大小、过期等),用户可以自行删除

        服务器将缓存的 html 保存在服务器上 优点:不依赖于浏览器规则,因为它发送无缓存,您控制缓存,而不是用户。 缺点:比客户端慢,因为它总是包含传输,占用服务器内存

        【讨论】:

          【解决方案5】:

          在处理缓存控制时有多种选择的原因很简单;没有适用于所有网站的通用正确答案。

          一个“名片”网站在其设计和内容方面非常静态,并且是服务器上唯一的网站,几乎可以将其设置为无限期地在任何地方缓存它。但是,如果该服务器实际上托管了一千个站点,那么我们开始不得不担心服务器缓存及其可行性,因为如果内存不足,IIS 将开始转储缓存项,因此我们可能不希望该服务器缓存。

          如果我们的 ecomm 网站每小时流量非常大,产品会发生变化和添加,我们会希望降低最大使用时间,以使内容保持最新。但话又说回来,这些要求更高的应用程序的内容生成可能会由于所有动态内容处理而减慢服务器速度,尤其是如果该站点位于共享服务器上。

          在通用 Internet、MSDN 和此处有大量资源,您可以查看这些资源以帮助您确定最适合您的方法。我在单一和共享环境中使用过各种各样的站点,我将大多数站点用作服务器和客户端位置,其中一些将使用 Last-Modified 标头,而另一些则使用 eTag

          【讨论】:

            猜你喜欢
            • 2017-10-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-12-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多