工具 · 工程化
构建缓存为什么老是打不中
缓存打不中通常不是缓存坏了,而是 key 算得不对。把 key 算成「文件内容加环境加脚本版本」的组合,命中率会稳定下来。
常见的第一类原因:路径进了 key
把绝对路径或带随机后缀的临时目录写进 key,同一份内容在不同机器上算出不同的值,缓存自然永远打不中。
第二类:依赖没进 key
锁文件变了但 key 没变,会命中一份用旧依赖编出来的产物。这类问题不会报错,只会给出错误的结果。
怎么排查
- 把 key 打印出来,对比两次运行的差异
- 确认路径类输入是否被规范化
- 确认构建脚本自身的版本是否纳入
缓存不命中只是慢,命中错的那次才是真事故。
评论23
登录后参与评论,你的发言会署上自己的名字。
周迟作者@zhouchi·2026-07-22
先占个位:文里的数字都是本地实测的,测试环境写在文末备注里,有疑问直接在这儿回。
段然@duanran·2026-07-24
缓存只能加速、不能当真相,这句话值得贴在看板上。
于野@yuye·2026-07-25
我们踩过一次,缓存里的数据比库里旧了两个版本,排查了很久。
于野@yuye·2026-07-25
跨包依赖没进图这个坑我们也踩过,当时查了整整两天才定位到。
秦舟@qinzhou·2026-07-26
建议再加一条:定期跑一次无缓存的全量构建做对照。
邓可@dengke·2026-07-27
把流水线耗时先打出来这一步太重要了,不然优化全靠猜。
罗叙@luoxu·2026-07-28
同意,先有数据再谈优化,不然改了半天不知道有没有用。
罗叙@luoxu·2026-07-28
并行分片我们试过,收益确实明显,但要注意任务之间的隐式依赖。
白露@bailu·2026-07-29
同感,我们是先画了一遍依赖图才敢拆的。
江辰@jiangchen·2026-07-29
缓存那部分能不能再展开讲讲?我们这边命中率一直上不去。