测试缓存有效期对后端负载影响的核心是控制变量、对比量化、验证因果:设定30秒/5分钟/30分钟三组有效期,关闭proxy_ignore_headers确保Nginx自主控制,压测中统计后端请求数与Nginx缓存状态比例,结合inactive参数交叉验证缓存实际存活情况。

测试不同缓存有效期对后端负载的影响,核心是控制变量、对比量化、验证因果。不能只看配置是否生效,而要让“时间”成为可测量的输入,“后端请求数”成为可追踪的输出。
设定明确的缓存时间梯度
在 proxy_cache_valid 中定义几组有区分度的有效期,例如:
-
短时效组:200/304 响应缓存 30 秒(
proxy_cache_valid 200 304 30s;) -
中时效组:同状态码缓存 5 分钟(
proxy_cache_valid 200 304 5m;) -
长时效组:缓存 30 分钟(
proxy_cache_valid 200 304 30m;)
每组单独配置在独立的 location 或通过 map + 变量动态切换,避免混用干扰。注意关闭 proxy_ignore_headers,确保 Nginx 不受后端 Cache-Control 或 Expires 干扰,让有效期完全由 Nginx 控制。
压测期间锁定请求与日志观测点
使用 wrk 或 ab 发起固定并发、固定总请求数的压测(如 wrk -t4 -c100 -d60s http://api.example.com/data),同时做三件事:
- 在后端服务上实时统计目标接口的访问次数(如
tail -f /var/log/app/access.log | grep '/data' | wc -l) - 在 Nginx 上开启带
$upstream_cache_status的 access log,例如:log_format cache_log '$remote_addr - $upstream_cache_status $request_time $upstream_response_time'; - 禁用
proxy_cache_use_stale和proxy_cache_lock,排除刷新和锁机制对回源次数的干扰,让有效期影响更纯粹
比对关键指标变化趋势
对每组有效期运行三次压测,取后端请求数均值,重点关注以下对应关系:
- 30 秒有效期 → 后端请求数接近总请求数(如 6000 次压测,后端收到约 5800+ 次)
- 5 分钟有效期 → 后端请求数显著下降(如仅 200–300 次,集中在前几十秒)
- 30 分钟有效期 → 后端请求数极低(如仅首次 1–2 次,其余全命中)
同时检查 Nginx 日志中 HIT / MISS / EXPIRED 的比例变化:30 秒组应出现大量 EXPIRED,说明缓存频繁过期并回源;30 分钟组则 HIT 占比超 99%,MISS 仅出现在首请求。
结合 inactive 参数交叉验证
proxy_cache_path 中的 inactive 参数(如 inactive=10m)会影响缓存文件的物理驻留时间,但它不决定“是否允许返回”,只决定“是否清理”。测试时可临时调小该值(如设为 30s),观察是否出现大量 MISS(因缓存被提前删掉),从而确认 inactive 是否与 proxy_cache_valid 共同作用导致后端负载异常升高。若调小 inactive 后后端请求数明显增加,说明缓存未真正“存活”到逻辑有效期结束。


















