← ClaudeAtlas

cache-disciplinelisted

內容鍵快取紀律——任何「為了快而略過重算/重驗」的機制(建置快取、增量回歸、依賴頁快取、記憶化、產物庫)怎麼做到快而不錯。用於任何加速工作:捷徑必須是可證等值而非跳驗、鍵必複合防碰撞、快取項自帶 manifest 開檔即驗、命中即證明傳遞、衛生上限防浪費轉移、一次掃描餵多個消費者。快取供錯值=最陰的錯:值看起來合理、來源卻是舊的。
poloplay0114/hard-won-claude-skills · ★ 0 · DevOps & Infrastructure · score 67
Install: claude install-skill poloplay0114/hard-won-claude-skills
# 內容鍵快取紀律(Cache Discipline) ## 什麼時候用 任何時候你想「這個算過了/驗過了,下次別重來」——建置產物快取、增量測試、資料頁攤平快取、 記憶化(memoization)、跨期產物庫。快取是效能的第一把刀,也是**正確性最陰的敵人**: 快取供錯值時,值本身看起來完全合理(它曾經是對的),只是**來源是舊的**——沒有任何當場的荒謬感 提醒你。這技能講怎麼讓「快」不用「對」來換。 --- ## 核心法則 ### 法則 1:捷徑=可證等值,不是跳驗 「命中快取所以不重算/不重驗」之所以合法,是因為一條可證的推理鏈: **同內容鍵 → 同 bytes → 同結果,且該 bytes 建造當下已完整驗過**。三環缺一,捷徑就是在驗證上開洞。 - 鍵不合 → **落回完整路徑,或吠**;絕不「不合但大概沒差」放行。靜默放行=洞。 - 推理鏈的最後一環(���造當下已驗)見法則 4。 ### 法則 2:鍵必複合,裸雜湊=靜默錯值的入口 內容鍵至少三元複合:**內容雜湊 + 大小 + 身分(路徑/名稱)**。 - 短雜湊(如 32-bit CRC)單獨當鍵,理論上兩份不同內容可同鍵——碰撞的後果不是報錯,是**拿舊內容 當新內容靜默供出**(如拿上一期的資料頁當本期),下游全對、來源全錯。 - 加大小擋「內容變、雜湊碰巧不變」;加身分擋「不同位置的同雜湊互吃」。三者同時巧合才可能碰撞, 機率壓到工程上可忽略。 - 鍵選型也有經濟學:能從容器 metadata 直接取的雜湊(免解壓)優於要展開全文才能算的——快取的 存在理由就是省那次展開(成本考量見 engineering-economy)。 ### 法則 3:快取項自帶 manifest,開檔即驗,絕不靜默供值 每個快取項**完成寫入時**同時寫 manifest:來源複合鍵 + 規模統計(筆數/格數)+ 內容摘要 + (若適用)已通過的驗證層。**每次取用前先驗 manifest**: - 不符 / 缺失 / 截斷(種到一半崩掉的半成品)→ 一律**視同 miss 重種**,並記錄事件;絕不把可疑項 當好的供出。 - 摘要要能抓「同筆數但內容被竄」(如 XOR/rolling digest),不只數筆數。 - 配**破壞測試常備**:截斷快取項→會吠並重種;竄改內容→摘要不合會吠;偽造 manifest→會吠。 守門的先驗會吠(呼應 verification-discipline「不信自報」——快取也是一種自報)。 ### 法則 4:命中=證明傳遞(快取項承載驗證結論) 一般快取只省「算」;把 manifest 記上「此內容建造時已通過哪些驗證」,命中就同時合法傳遞 「已驗過」的結論——**快取成為驗證結論的載體**,增量驗證因此成立(沒變的部分,上次的「過」 繼續有效)。前提兩條,缺一即假: - 建造時的驗證是**完整的**(該層該驗的全驗了,不是抽驗冒充全驗); - 「沒變」是**法則 1/2 等級的沒變**(複合鍵一致),不是「看起來沒人動過」。 被快取省掉的檢查,必須能指出它在建造時點的等價完成處——省的是重複,不是覆蓋 (呼應 verification-discipline「該有而沒有」)。 ### 法則 5:快取衛生——省的成本不得在別處長回來 快取是用磁碟換時間,這筆帳要持續是正的: - 快取目錄有**容量上限與汰換**(如 LRU by mtime);沒有上限的快取=慢性磁碟洩漏。 - **孤兒鍵可清**:來源已不存