ASP.NET Core - 输出缓存和响应缓存的区别

12
ASP.NET Core 7预览版6刚刚推出了输出缓存,它可以缓存终结点的输出。然而,ASP.NET已经有了响应缓存,似乎已经提供了相同的功能。
两者之间的区别是什么?应该在什么情况下使用其中一个,什么情况下使用另一个?

有一段非常有趣的视频由微软制作,详细解释了它们之间的区别。 - CodingMytra
3个回答

17
我一直在寻找答案,试图理解两者之间的区别,并花了很多时间来理解它们之间的差异以及何时(或不)使用彼此。
截至2022年11月,.Net 7已经发布,但文档对它们之间的区别并不清楚。文档和所有视频只谈到了OutputCache作为ResponseCache的替代品。 同时搜索OutputCache,会出现许多来自旧的AspNet(完整框架)MVC 5的结果。
因此,让我们澄清一下它们之间的区别以及如何使用彼此。 ResponseCache 首先,ResponseCache可以分为两个部分,它们独立工作,并且是关于信息缓存的不同概念。让我们了解一下它们:
1. ResponseCacheAttribute:基本上,它可以操作缓存头部,例如VaryCache-Control等等。通过告诉浏览器或代理服务器来存储(或不存储)响应内容,这种技术可以减少向服务器发送的请求次数,如果使用正确的话。

ResponseCache属性设置响应缓存头部。客户端和中间代理服务器应该遵守这些头部以进行响应缓存,符合HTTP 1.1缓存规范。

2. Response Caching Middleware:基本上,它用于根据ResponseCacheAttribute定义的头部进行服务器端缓存。根据发送到服务器的请求头部,响应将不会在服务器端进行缓存。

根据HTTP缓存头部启用服务器响应缓存。实现标准的HTTP缓存语义。类似代理服务器一样基于HTTP缓存头部进行缓存。

通常对于像Razor Pages这样的UI应用程序来说,并不是很有益,因为浏览器通常会设置请求头以防止缓存。输出缓存在ASP.NET Core 7.0及更高版本中可用,对UI应用程序非常有益。通过输出缓存,配置可以独立于HTTP头决定哪些内容应该被缓存。
而在这一点上,OutputCache成为了Response Caching Middleware的替代品。
OutputCache(在ASP.NET Core 7.0及更高版本中可用)

OutputCache配置独立于HTTP头部决定了哪些内容应该被缓存(服务器端)。此外,它还带来了许多新功能,如缓存条目失效、存储介质可扩展性和其他功能

结论

为了兼顾两个世界的优势,您可以使用:

  • ResponseCacheAttribute:用于操作响应头并使客户端/代理能够在客户端上存储内容;
  • OutputCache:用于在服务器端上存储响应并在缓存响应时增加吞吐量。

两者都可以独立使用。您可以选择最适合您应用程序的那个。


2
我没有看过CodingMytra提供的视频。但我认为输出缓存响应缓存有一些增强功能。例如,您可以指定几秒钟的缓存时间。
我找到了一个有用的视频,其中有一些演示可以让你更好地了解.Net7中的输出缓存。我认为您可以在这个视频中找到区别。
我们可以在这个github问题中找出为什么需要输出缓存。
链接:添加对输出缓存的支持#27387

0
最重要的区别在于ResponseCache是在客户端缓存,而OutputCache是在服务器端缓存。假设你从两个不同的浏览器发送相同的请求,你将无法从ResponseCache中获益,但可以从OutputCache中获益。当然,使用OutputCache会消耗服务器端资源,但使用ResponseCache则无需担心这个问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接