全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-20 6 分钟 ✍️ juanwangdev

缓存过期与清理策略

缓存过期和清理是保证数据一致性的关键。NGINX 提供自动过期和主动清理两种机制。

自动过期

按时间过期

nginx
proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid 404 1m;
proxy_cache_valid any 5m;

proxy_cache_valid 定义不同状态码的缓存有效期。过期后缓存标记为 EXPIRED,下次请求会回源验证。

inactive 清除

nginx
proxy_cache_path /var/cache/nginx keys_zone=my_cache:10m inactive=60m;

inactive 时间内未被访问的缓存被 cache manager 清除。即使未过期也会被清除。

主动清理

PURGE 方法(NGINX Plus)

nginx
proxy_cache_path /var/cache/nginx keys_zone=my_cache:10m;

server {
    location / {
        proxy_cache my_cache;
        proxy_pass http://backend;
    }
    
    location ~ /purge(/.*) {
        allow 10.0.0.0/8;
        deny all;
        proxy_cache_purge my_cache $1;
    }
}

发送 PURGE /purge/path/to/resource 可删除指定缓存。仅 NGINX Plus 和第三方 ngx_cache_purge 模块支持。

手动清除缓存

Bash
# 查找并删除特定缓存
find /var/cache/nginx -name "$(echo -n '/path/to/resource' | md5sum | cut -d' ' -1)" -delete

# 清空整个缓存目录
rm -rf /var/cache/nginx/*

手动删除需谨慎,直接删除文件可能导致 cache manager 元数据不一致。

缓存更新策略

后台更新

nginx
proxy_cache_use_stale updating error timeout http_500 http_502 http_503 http_504;
proxy_cache_background_update on;
proxy_cache_revalidate on;
  • proxy_cache_background_update — 后台异步更新过期缓存
  • 客户端仍获取旧缓存,同时 NGINX 异步回源更新
  • proxy_cache_revalidate — 使用条件请求验证

后台更新减少用户感知的延迟。适合内容更新频繁但对实时性要求不高的场景。

按 URL 模式跳过缓存

动态内容不缓存

nginx
map $request_uri $skip_cache {
    default 0;
    ~*/admin/ 1;
    ~*/api/ 1;
    ~*\? 1;  # 带参数的请求
    ~*/feed$ 1;
}

server {
    proxy_cache_bypass $skip_cache;
    proxy_no_cache $skip_cache;
}

缓存预热

预加载热门内容

Bash
# 使用 curl 预热
curl -s -o /dev/null http://localhost/popular-page-1
curl -s -o /dev/null http://localhost/popular-page-2

# 或使用爬虫批量预热
wget --spider -r -l 2 http://localhost/

缓存预热在发布前或高峰前加载热门页面到缓存,避免冷启动时的慢响应。

要点总结

  • proxy_cache_valid 按状态码设置不同过期时间
  • inactive 清除长期未访问的缓存释放磁盘空间
  • NGINX Plus 支持 proxy_cache_purge 主动清除缓存
  • proxy_cache_background_update 后台异步更新过期缓存
  • 通过 map 指令按 URL 模式跳过缓存
  • 缓存预热减少冷启动延迟
  • 手动删除缓存文件需谨慎,可能影响元数据一致性

📝 发现内容有误?点击此处直接编辑

← 上一篇 动态缓存与静态缓存
下一篇 → 限流算法(令牌桶、漏桶)
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库