工具 · 工程化

构建缓存为什么老是打不中

缓存打不中通常不是缓存坏了,而是 key 算得不对。把 key 算成「文件内容加环境加脚本版本」的组合,命中率会稳定下来。

常见的第一类原因:路径进了 key

把绝对路径或带随机后缀的临时目录写进 key,同一份内容在不同机器上算出不同的值,缓存自然永远打不中。

第二类:依赖没进 key

锁文件变了但 key 没变,会命中一份用旧依赖编出来的产物。这类问题不会报错,只会给出错误的结果。

怎么排查

  • 把 key 打印出来,对比两次运行的差异
  • 确认路径类输入是否被规范化
  • 确认构建脚本自身的版本是否纳入
缓存不命中只是慢,命中错的那次才是真事故。

评论23

访客

登录后参与评论,你的发言会署上自己的名字。

  • 周迟

    周迟作者@zhouchi2026-07-22

    先占个位:文里的数字都是本地实测的,测试环境写在文末备注里,有疑问直接在这儿回。

  • 段然

    段然@duanran2026-07-24

    缓存只能加速、不能当真相,这句话值得贴在看板上。

  • 于野

    于野@yuye2026-07-25

    我们踩过一次,缓存里的数据比库里旧了两个版本,排查了很久。

  • 于野

    于野@yuye2026-07-25

    跨包依赖没进图这个坑我们也踩过,当时查了整整两天才定位到。

  • 秦舟

    秦舟@qinzhou2026-07-26

    建议再加一条:定期跑一次无缓存的全量构建做对照。

  • 邓可

    邓可@dengke2026-07-27

    把流水线耗时先打出来这一步太重要了,不然优化全靠猜。

  • 罗叙

    罗叙@luoxu2026-07-28

    同意,先有数据再谈优化,不然改了半天不知道有没有用。

  • 罗叙

    罗叙@luoxu2026-07-28

    并行分片我们试过,收益确实明显,但要注意任务之间的隐式依赖。

  • 白露

    白露@bailu2026-07-29

    同感,我们是先画了一遍依赖图才敢拆的。

  • 江辰

    江辰@jiangchen2026-07-29

    缓存那部分能不能再展开讲讲?我们这边命中率一直上不去。