如何通过GitHub Actions工作流清除Express服务器的node-cache缓存?
实现GitHub Actions触发Express服务器node-cache清除的方案
方案1:添加专用缓存清除API端点(推荐)
这是最通用且适配多实例部署的方案,步骤如下:
- 在Express服务器新增受保护的API路由,调用
node-cache的flushAll()方法清除缓存。必须添加权限验证,比如用API密钥防止恶意请求。 - 示例服务器代码:
const NodeCache = require('node-cache'); const cache = new NodeCache(); // 缓存清除路由 app.post('/api/cache/clear', (req, res) => { const authKey = req.headers['x-cache-clear-key']; // 从环境变量读取验证密钥 if (authKey !== process.env.CACHE_CLEAR_KEY) { return res.status(403).json({ success: false, message: 'Invalid authorization key' }); } cache.flushAll(); res.status(200).json({ success: true, message: 'Cache cleared successfully' }); });
- 在GitHub Actions工作流中,用
curl发送请求触发清除:
name: Clear Server Cache on: push: branches: [ main ] # 可根据需求设置触发分支,比如release分支 workflow_dispatch: # 允许手动触发 jobs: clear-cache: runs-on: ubuntu-latest steps: - name: Send cache clear request run: | curl -X POST \ -H "X-Cache-Clear-Key: ${{ secrets.CACHE_CLEAR_KEY }}" \ ${{ secrets.SERVER_BASE_URL }}/api/cache/clear # 密钥和服务器地址存在GitHub仓库Secrets中,避免硬编码
方案2:进程信号触发(仅单实例部署可用)
如果服务器是单实例运行,可以通过发送系统信号触发缓存清除:
- 服务器代码监听自定义信号:
process.on('SIGUSR1', () => { console.log('Received cache clear signal, flushing cache...'); cache.flushAll(); });
- GitHub Actions通过SSH连接服务器发送信号:
jobs: clear-cache: runs-on: ubuntu-latest steps: - name: SSH to server and trigger cache clear uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.SERVER_HOST }} username: ${{ secrets.SERVER_USER }} key: ${{ secrets.SERVER_SSH_KEY }} script: pkill -SIGUSR1 node
注意:多实例部署下该方案只会清除单个实例的缓存,不推荐用于分布式场景。
方案3:部署流程联动清除
如果GitHub Actions同时负责服务器部署,可在部署完成后自动触发缓存清除:
- 比如用PM2管理进程时,在部署脚本中添加:
# 重载进程并清除缓存 pm2 reload your-app-name curl -X POST -H "X-Cache-Clear-Key: $CACHE_CLEAR_KEY" $SERVER_BASE_URL/api/cache/clear
- 将该步骤整合到部署工作流,实现部署完成后自动清缓存,无需手动操作。
关键注意事项
- 安全验证不可少:所有触发缓存清除的操作必须加权限验证,API密钥、服务器凭证等敏感信息必须存在GitHub Secrets中,禁止硬编码。
- 多实例适配:如果是多实例部署,优先用方案1,确保每个实例都能收到清除请求;或者考虑替换
node-cache为Redis等分布式缓存,只需清除一次即可同步所有实例。 - 触发时机灵活配置:根据业务需求选择触发条件,比如代码合并、版本发布,或保留手动触发选项应对紧急场景。
内容的提问来源于stack exchange,提问作者MrLenoir
相关产品推荐
相关产品推荐

