缓存失效

编辑本页

警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 2.7,现已不再维护。

本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。

缓存失效

“计算机科学中只有两件难事:缓存失效和命名。”——菲尔·卡尔顿

一旦URL被网关缓存缓存,缓存将不再向应用程序请求该内容。这允许缓存提供快速响应,并减少应用程序的负载。但是,您可能会交付过时的内容。摆脱这种困境的一种方法是使用较长的缓存生命周期,但在内容更改时主动通知网关缓存。反向代理通常提供接收此类通知的通道,通常是通过特殊的HTTP请求。

谨慎

虽然缓存失效功能强大,但尽可能避免它。如果你不能使某些东西无效,过期的缓存可能会被使用很长一段时间。相反,请使用较短的缓存生命周期或使用验证模型,并调整控制器以执行中所解释的有效验证检查HTTP缓存验证

此外,由于无效是每种类型的反向代理所特有的主题,因此使用此概念将使您绑定到特定的反向代理,或者需要额外的努力来支持不同的代理。

然而,有时您需要显式失效时获得的额外性能。对于无效,应用程序需要检测内容何时发生变化,并告诉缓存从缓存中删除包含该数据的url。

提示

如果您想使用缓存失效,请查看FOSHttpCacheBundle.这个包提供了帮助处理各种缓存失效概念的服务,还记录了几个常用缓存代理的配置。

如果一个内容对应一个URL,则清洗模型运行良好。使用HTTP方法向缓存代理发送请求清洗(使用单词“PURGE”是一种惯例,技术上这可以是任何字符串)而不是得到并使缓存代理检测到这一点,并从缓存中删除数据,而不是通过应用程序获取响应。

下面介绍如何配置Symfony反向代理以支持欧宝娱乐app下载地址清洗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
/ / app / AppCache.php使用欧宝娱乐app下载地址FrameworkBundleHttpCacheHttpCache使用欧宝娱乐app下载地址组件HttpFoundation请求使用欧宝娱乐app下载地址组件HttpFoundation响应/ /……AppCache扩展HttpCache受保护的函数无效(请求请求= false)如果“清除”= = !请求->getMethod ()) {返回::无效(请求);}如果“127.0.0.1”= = !请求->getClientIp ()) {返回响应(无效的HTTP方法、响应::HTTP_BAD_REQUEST);}响应反应();如果->getStore ()->清洗(请求->getUri ())) {响应->setStatusCode(响应::并,“清除”);}其他的响应->setStatusCode(响应::HTTP_NOT_FOUND,“没有找到”);}返回响应;}}

谨慎

你必须保护清洗HTTP方法以某种方式避免随机的人清除您的缓存数据。

清洗指示缓存将资源放入它的所有变体(根据不同标题,见上文)。清洗的另一种选择是让人耳目一新一个内容。刷新意味着指示缓存代理丢弃其本地缓存并重新获取内容。这样,新内容在缓存中已经可用。刷新的缺点是变量不会失效。

在许多应用程序中,相同的内容位用于具有不同url的不同页面。对于这些情况,存在更灵活的概念:

  • 禁止使URL或其他条件上匹配正则表达式的响应失效;
  • 缓存标签允许您为响应中使用的每个内容添加一个标记,以便您可以使包含特定内容的所有url无效。
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。