自动缓存清除需前置、分层、精准触发:一、运行时缓存部署前清空(如laravel命令或rm -rf);二、前端构建启用哈希并注入build_id;三、nginx用proxy_cache_bypass配合curl ?refresh=1,cdn调purge api;四、模型级缓存执行cleanup并sigusr2重载。

在发布系统的 CI/CD 流程中实现自动缓存清除,核心是把清理动作前置、分层覆盖、精准触发,而不是等部署完成再“补救”。老旧缓存若未及时失效,会导致用户看到旧资源、接口返回过期数据、前端加载错误 JS、CDN 呈现陈旧页面等问题。以下是四类关键缓存的自动化清除实现方式,可直接嵌入 Jenkins、GitLab CI、GitHub Actions 或自研发布脚本中:
一、运行时与框架缓存:部署前强制清空
这类缓存(如 Laravel 的 storage/framework/cache、Symfony 的 var/cache、PHP OPcache)驻留在服务本地,新代码启动后若仍读取旧缓存,会直接导致逻辑错乱。
- 在
composer install或npm install后、服务重启前执行:php artisan config:clear --no-interaction --env=production php artisan cache:clear --no-interaction --env=production php artisan view:clear --no-interaction --env=production
- 非 Laravel 项目可统一清理目录:
rm -rf storage/framework/cache/* bootstrap/cache/* var/cache/prod/*
- 若用 Redis/Memcached,加一步强制刷新:
redis-cli -n 0 FLUSHDB 2>/dev/null || true memcached-tool 127.0.0.1:11211 flush 2>/dev/null || true
二、前端构建产物缓存:从源头杜绝复用
浏览器和 CDN 对 main.js、app.css 等静态资源强缓存,必须让每次发布生成不可复用的新路径。
- 构建工具启用哈希或时间戳:
- Vite:默认
build.rollupOptions.output.entryFileNames: 'assets/[name]-[hash].js' - Webpack:配置
output.filename: '[name].[contenthash:8].js'
- Vite:默认
-
index.html响应头强制不缓存:location = /index.html { add_header Cache-Control "no-cache, no-store, must-revalidate"; } - CI 中注入构建标识(供日志与排查用):
export BUILD_ID=$(date -u +%Y%m%d%H%M%S)
三、Nginx / 反向代理缓存:部署时同步失效
Nginx 的 proxy_cache 不感知文件变更,需主动触发“绕过缓存回源”或键失效。
- 配置 Nginx 支持缓存绕过:
proxy_cache_bypass $arg_refresh; proxy_no_cache $arg_refresh;
- 发布脚本末尾调用一次带参请求,强制新内容写入缓存:
curl -s "https://your-site.com/?refresh=1" > /dev/null
- 若用 Cloudflare、阿里云 CDN 等,调用 purge API:
curl -X POST "https://api.cloudflare.com/client/v4/zones/{ZONE_ID}/purge_cache" \ -H "Authorization: Bearer ${CF_TOKEN}" \ -H "Content-Type: application/json" \ --data '{"files":["https://your-site.com/*"]}'
四、模型/元数据级缓存:避免 LLM 或配置热加载污染
部分系统(如含向量检索、规则引擎、动态配置中心)会在内存或本地磁盘缓存模型或元数据(如 .metadata_cache.bin),需显式清理+重载。
- 执行专用清理命令(示例):
core-cli cleanup --ttl 0s rm -f .metadata_cache.bin
- 清理后向主进程发信号重载(如支持 graceful reload):
kill -SIGUSR2 $(cat /var/run/app.pid)
所有步骤应按顺序串入 CI/CD 流水线:
代码拉取 → 依赖安装 → 运行时缓存清除 → 构建(含哈希注入)→ 部署文件 → 代理层缓存失效 → 模型/元数据缓存清理与重载 → 服务平滑重启
不复杂但容易忽略。











