缓存失效
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 5.2,现已不再维护。
读本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。
缓存失效
“计算机科学中只有两件难事:缓存失效和命名。”——菲尔·卡尔顿
一旦URL被网关缓存缓存,缓存将不再向应用程序请求该内容。这允许缓存提供快速响应,并减少应用程序的负载。但是,您可能会交付过时的内容。摆脱这种困境的一种方法是使用较长的缓存生命周期,但在内容更改时主动通知网关缓存。反向代理通常提供接收此类通知的通道,通常是通过特殊的HTTP请求。
谨慎
虽然缓存失效功能强大,但尽可能避免它。如果你不能使某些东西无效,过期的缓存可能会被使用很长一段时间。相反,请使用较短的缓存生命周期或使用验证模型,并调整控制器以执行中所解释的有效验证检查HTTP缓存验证.
此外,由于无效是每种类型的反向代理所特有的主题,因此使用此概念将使您绑定到特定的反向代理,或者需要额外的努力来支持不同的代理。
然而,有时您需要显式失效时获得的额外性能。对于无效,应用程序需要检测内容何时发生变化,并告诉缓存从缓存中删除包含该数据的url。
提示
如果您想使用缓存失效,请查看FOSHttpCacheBundle.这个包提供了帮助处理各种缓存失效概念的服务,还记录了几个常用缓存代理的配置。
如果一个内容对应一个URL,则清洗
模型运行良好。使用HTTP方法向缓存代理发送请求清洗
(使用单词“PURGE”是一种惯例,技术上这可以是任何字符串)而不是得到
并使缓存代理检测到这一点,并从缓存中删除数据,而不是通过应用程序获取响应。
下面介绍如何配置Symfony反向代理(参见ob娱乐下载HTTP缓存)以支援清洗
HTTP方法:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
/ / src / CacheKernel.php名称空间应用程序;使用ob娱乐下载\包\FrameworkBundle\HttpCache\HttpCache;使用ob娱乐下载\组件\HttpFoundation\请求;使用ob娱乐下载\组件\HttpFoundation\响应;/ /……类CacheKernel扩展HttpCache{受保护的函数无效(请求$请求bool,$抓= false){如果(“清除”= = !$请求->getMethod ()) {返回父::无效($请求,$抓);}如果(“127.0.0.1”= = !$请求->getClientIp ()) {返回新响应(无效的HTTP方法、响应::HTTP_BAD_REQUEST);}$响应=新反应();如果($这->getStore ()->清洗($请求->getUri ())) {$响应->setStatusCode(响应::并,“清除”);}其他的{$响应->setStatusCode(响应::HTTP_NOT_FOUND,“没有找到”);}返回$响应;}}
谨慎
你必须保护清洗
HTTP方法以某种方式避免随机的人清除您的缓存数据。
清洗指示缓存将资源放入它的所有变体(根据不同
头,看到改变HTTP缓存的响应).清洗的另一种选择是让人耳目一新一个内容。刷新意味着指示缓存代理丢弃其本地缓存并重新获取内容。这样,新内容在缓存中已经可用。刷新的缺点是变量不会失效。
在许多应用程序中,相同的内容位用于具有不同url的不同页面。对于这些情况,存在更灵活的概念:
- 禁止使URL或其他条件上匹配正则表达式的响应失效;
- 缓存标签允许您为响应中使用的每个内容添加一个标记,以便您可以使包含特定内容的所有url无效。