如何通过proxy_cache_background_update缓解缓存过期瞬间导致的回源流量高峰问题?
- 内容介绍
- 文章标签
- 相关推荐
本文共计752个文字,预计阅读时间需要4分钟。
《简述以下原创内容开头,不要试图图解问题,不要啰嗦,不超过100个字。》
proxy_cache_background_update 的真实行为
它只做一件事:缓存过期后,立刻返回旧内容,同时在后台发一个新请求去刷新缓存。但这个“后台请求”是无节制的——只要有一个请求触发了过期判定,就发一次;1000 个并发请求命中同一个过期 key,就会并发发起 1000 次后台更新。
这不是“缓解压力”,这是“分散压力到上游”,而且是毫无收敛的分散。
- 它不判断当前是否已有同 key 的更新正在进行
- 它不等待、不排队、不合并
- 它和 proxy_cache_lock 完全无关,即使 lock 开着,background_update 仍会照常发请求(除非你显式禁用)
真正起作用的是 proxy_cache_lock + proxy_cache_use_stale updating
要让“过期后只允许一次回源”,必须靠 proxy_cache_lock 控制入口,再用 proxy_cache_use_stale updating 让其他请求有路可退。
本文共计752个文字,预计阅读时间需要4分钟。
《简述以下原创内容开头,不要试图图解问题,不要啰嗦,不超过100个字。》
proxy_cache_background_update 的真实行为
它只做一件事:缓存过期后,立刻返回旧内容,同时在后台发一个新请求去刷新缓存。但这个“后台请求”是无节制的——只要有一个请求触发了过期判定,就发一次;1000 个并发请求命中同一个过期 key,就会并发发起 1000 次后台更新。
这不是“缓解压力”,这是“分散压力到上游”,而且是毫无收敛的分散。
- 它不判断当前是否已有同 key 的更新正在进行
- 它不等待、不排队、不合并
- 它和 proxy_cache_lock 完全无关,即使 lock 开着,background_update 仍会照常发请求(除非你显式禁用)
真正起作用的是 proxy_cache_lock + proxy_cache_use_stale updating
要让“过期后只允许一次回源”,必须靠 proxy_cache_lock 控制入口,再用 proxy_cache_use_stale updating 让其他请求有路可退。

