You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 00:18:31