大促期间缓存需动态调整:按接口类型分级(商品页5–10分钟、搜索页2–5分钟、活动页30分钟+、购物车等禁用)、按时段弹性伸缩(如promo_mode=peak时ttl=15秒)、按状态自动降级(超时/错误返回备缓存),并配套监控与快速回滚。

大促期间缓存时间不能一成不变,必须根据流量峰值、业务节奏和数据敏感度做动态调整。核心思路是:**按接口类型分级控制 + 按时段弹性缩放 + 按状态自动降级**,而不是全局统一设一个固定值。
按接口类型分层设置基础有效期
不同接口对时效性要求差异极大,需分类配置:
- 商品详情页:基础缓存 5–10 分钟(允许短时价格/库存延迟),大促开始前 30 分钟可临时缩短至 60 秒
-
搜索结果页 / 排行榜:默认 2–5 分钟,大促实时榜单类接口启用
proxy_cache_valid 200 302 30s -
活动页文案 / Banner 图片链接:静态化程度高,可设为 30 分钟以上,大促中若人工更新,配合
PURGE主动清除 -
购物车、下单页、用户中心:一律禁用缓存(通过
proxy_no_cache $cookie_user_id或proxy_cache_bypass $cookie_session控制)
用变量驱动缓存时间动态伸缩
不靠手动改配置重启,而是让 Nginx 根据请求上下文实时计算过期时间:
- 在
http块定义映射关系,例如:
default "300";
"flash" "60";
"peak" "15";
}
- 在
location中引用:
- 前端或压测脚本在请求中带上
?promo_mode=peak,即可触发 15 秒缓存;运维也可用 curl 批量注入临时策略
结合后端信号实现智能降级与预热
缓存不是孤立运行的,要与业务系统联动:
- 后端服务在发布新版本或库存变更时,主动发
POST /_purge请求清空对应路径缓存(需配置auth_request鉴权) - 大促前 1 小时,用脚本批量预热高频接口:
curl -I "https://site.com/api/products?category=phone&page=1",让主缓存区提前填充 - 当后端响应超时或错误率 >5%,启用
proxy_cache_use_stale error timeout updating http_500 http_502,返回备缓存(需提前配置二级缓存区)
监控与快速回滚机制
所有动态调整必须可观测、可追溯、可秒级恢复:
- 开启
add_header X-Cache-Status "$upstream_cache_status";,日志中记录 HIT/MISS/EXPIRED/BYPASS - 用 Prometheus + Grafana 监控各接口缓存命中率、平均 TTL、PURGE 调用量,命中率跌至 70% 以下自动告警
- 准备两套缓存配置文件(
cache_normal.conf和cache_flashsale.conf),切流只需nginx -s reload,无需修改逻辑











