Symfony欧宝娱乐app下载地址 4.2新增功能:缓存踩踏保护
2018年11月15日·发表的哈维尔Eguiluz
警告:这篇文章是关于一个不受支持的Symfony版本。欧宝娱乐app下载地址有些信息可能已经过时了。阅读最新的Symfony文档欧宝娱乐app下载地址.
提供的
尼古拉斯Grekas
在# 27009.
一个缓存踩踏事件是一种级联故障,当系统处于非常高的负载下时可能发生。考虑一个web应用程序,它缓存一些页面来提高性能。当该页面的缓存版本过期且服务器负载非常大时,多个用户可能需要相同的非缓存页面,这会耗尽共享资源,从而导致系统崩溃。
有多种技术可以防止“缓存踩踏”。在Sy欧宝娱乐app下载地址mfony 4.2中,我们添加了一个名为概率提前到期,到缓存组件(我们还添加了一个基于锁的缓存,用于缓存是冷的。)
这种技术解决了踩踏问题,迫使缓存值在过期之前重新生成。无论何时从缓存中读取值,应用程序都会做出“概率决策”,以决定是否必须重新生成该值。由于所使用的公式,缓存值越早过期,重新计算它的概率就越高。
为了更好地控制这种“概率决策”,本文get ()
的方法CacheInterface
添加了第三个可选参数β
.这是一个浮动
默认为1.0
,提供最佳的踩踏防护。
大多数情况下,你不需要关心这个参数。欧宝娱乐app下载地址Symfony提供正确的默认值来保护您的应用程序。但是,您可以将其设置为任意值或为0
禁用此保护或正
强制缓存值立即过期:
1 2 3 4 5 6 7 8
//当后端缺少缓存键时,这个闭包将被调用$回调=函数(){…返回$computedValue;};//当未定义时,beta = 1.0$productsCount=$缓存->get (“stats.products_count”,$回调);// beta = INF强制缓存值立即过期$productsCount=$缓存->get (“stats.products_count”,$回调、正);
发表在#生活在边缘
评论
尼古拉斯Grekas
2018年11月15日在北京时间
@Pierre别难过,beta的默认值是依赖于实现的:你可以通过一个装饰器来改变它(在未来,根据需求,可以通过配置来改变它)。
评论截止。
为了确保评论保持相关性,旧帖子将被关闭。
Pierre Rineau is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now