fastcgi_cache_lock

'fastcgi_cache_lock' 指令控制 FastCGI 缓存操作的锁定行为,以避免多个同时请求导致的缓存风暴。 — NGINX HTTP Core

fastcgi_cache_lock
httpserverlocation
语法fastcgi_cache_lock on | off;
默认值off
上下文http, server, location
模块NGINX HTTP Core
参数flag

说明

'fastcgi_cache_lock' 指令可用于防止多个请求并发生成相同的 FastCGI 响应。启用时,如果对同一已缓存资源发起两个或更多请求,只有第一个请求会继续生成 upstream 响应。后续请求将被排队,直到响应生成并缓存,从而使它们能够使用缓存的响应,而不是触发多个 upstream 请求。 本指令接受一个标志('on' 或 'off')。设置为 'on' 时,NGINX 将应用锁定机制,允许仅有一个请求生成响应,其余请求则等待。设置为 'off' 则禁用此行为,对于同一资源的所有请求都可能同时生成新的 upstream 请求,这可能在高流量环境中导致负载增加和性能问题。 需要注意的是,在可能发生缓存风暴的场景中使用 'fastcgi_cache_lock' 可以提高效率,但应结合合适的缓存策略,以确保在最大化缓存使用的同时保持性能最佳。

配置示例

location /api {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_cache my_cache;
    fastcgi_cache_lock on;
    fastcgi_cache_key "$scheme$request_method$host$request_uri";
}

启用缓存锁定可能导致排队请求的响应时间增加,因此应在负载条件下进行测试以找到最佳设置。

如果启用了'fastcgi_cache_lock',请确保也对缓存过期设置进行调整,否则可能会比预期更长时间提供陈旧的响应。