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

Node.js flat-cache缓存清除时机及Express服务落地咨询

关于flat-cache缓存清除时机的实用方案(适配你的Node.js+MySQL场景)

嘿,结合你这个对接MySQL的Express服务场景,我来分享几个靠谱的flat-cache缓存清除时机方案,你可以根据业务需求选:

  • 数据变更时主动清除(最推荐)
    既然你的缓存数据来自MySQL,那当产品数据发生新增、修改、删除操作时,就应该立刻清除对应客户的缓存,这是保证缓存与数据库数据一致的最精准方式。
    比如在你的POST/PUT/DELETE接口里,完成数据库操作后直接调用flat-cache的清除方法:

    // 示例:更新产品的接口中清除对应缓存
    router.put('/products/update/:customer_id', async (req, res) => {
      // 1. 先执行MySQL更新逻辑
      await db.query('UPDATE products SET ... WHERE customer_id = ?', [req.params.customer_id]);
      
      // 2. 清除该客户的产品缓存
      const cacheKey = `products_${req.params.customer_id}`;
      cache.removeKey(cacheKey);
      cache.save(); // 务必记得保存缓存变更
      
      res.json({ success: true, msg: '产品更新成功' });
    });
    
  • 定时过期自动清除
    如果你的产品数据更新频率不高,或者可以接受1小时/几小时的延迟,那可以给缓存加个过期时间。flat-cache本身没有内置过期机制,你可以自己实现:

    router.get('/all/:customer_id', (req, res, next) => {
      const cacheKey = `products_${req.params.customer_id}`;
      const cachedContent = cache.getKey(cacheKey);
      
      // 校验缓存是否存在且未过期(比如设置1小时有效期)
      const expireTime = 3600 * 1000;
      if (cachedContent && Date.now() - cachedContent.timestamp < expireTime) {
        return res.json(cachedContent.data);
      }
      
      // 缓存失效或不存在,查询数据库并更新缓存
      db.query('SELECT * FROM products WHERE customer_id = ?', [req.params.customer_id], (err, results) => {
        if (err) return next(err);
        cache.setKey(cacheKey, {
          data: results,
          timestamp: Date.now()
        });
        cache.save();
        res.json(results);
      });
    });
    
  • 手动触发清除(辅助手段)
    可以加一个仅限管理员访问的接口,用来手动清除指定客户或全部缓存,适合临时排查问题或定期维护:

    // 清除指定客户的缓存
    router.post('/admin/clear-cache/:customer_id', (req, res) => {
      // 这里可以加管理员权限校验逻辑
      const cacheKey = `products_${req.params.customer_id}`;
      cache.removeKey(cacheKey);
      cache.save();
      res.json({ msg: `客户${req.params.customer_id}的缓存已清除` });
    });
    
    // 清除全部缓存
    router.post('/admin/clear-all-cache', (req, res) => {
      cache.clear();
      cache.save();
      res.json({ msg: '全部产品缓存已清除' });
    });
    
  • 服务器重启时清除(可选)
    如果你的缓存不需要跨服务器重启持久化,可以在服务启动时调用cache.clear(),不过flat-cache默认会把缓存存在本地文件里,重启后依然保留,所以这个场景只适合临时缓存的需求。

总结一下:优先用数据变更时主动清除来保证数据一致性;如果无法监听数据变更,再用定时过期方案;手动清除作为辅助工具即可。

内容的提问来源于stack exchange,提问作者codeinprogress

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:35:38