【工程思维】缓存设计:你不是记性差,是没建缓存
我经常被人说记性好。读过的书能复述个大概,见过的人隔了半年还能叫出名字,各种命令行和快捷键张嘴就来。
但我自己知道,我记性一点都不好。手机号码除了自己的,一个都背不出来。昨天中午吃了什么,要想三秒才想起来。上周答应过别人什么事,如果不写下来,忘得干干净净。
后来我琢磨明白了:我记住的那些东西,不是靠脑子好,是靠别的东西在撑着。
问题出在哪
想象你是个数据库。每个请求打进来,你都要去磁盘上翻一遍,再算一遍,再吐出去。一天几百个请求,每个都这么搞,谁也扛不住。
人就是这样的。从「今天中午吃什么」到「这个项目该用什么方案」,从「那个命令的快捷键是什么」到「上次那个人叫什么名字」,每天要做的决策、要调取的记忆,量大得离谱。但大脑只有一个——没有副本,没有只读库,没有 CDN。
更惨的是,人的「内存」还特别小。心理学里有个概念叫工作记忆容量,大概 4 到 7 个组块。同时想超过七个东西,就开始丢。刚想起一个,前一个就没了。
所以不是记性差。是默认配置就这样,谁都差。
工程上怎么解的
工程里遇到这个问题,解法再简单不过:别让每个请求都打到数据库,把高频用、不常变的东西放到离使用者最近的地方。这叫缓存。
但工程里真正厉害的不是「做了缓存」,而是「怎么做的」——
分层缓存。CPU 有 L1、L2、L3 三级缓存,越靠近计算单元越贵、容量越小,但越快。它不是一层缓存就完事了,是三层各放不同热度的数据。
冷启动设计。新系统上线,缓存是空的。如果等第一个请求才去加载,那个用户的体验直接爆炸——这叫缓存击穿。所以系统启动时会做预热:提前把要用的数据都拉进缓存里,不等人来敲门。
缓存粒度。不是什么都缓存。计算结果可以缓存,但原始数据只存一次,用的时候再组合。粒度过粗,一个细节过时了整条废;粒度过细,查起来麻烦。
翻译到生活里
这三个设计原则,翻译过来就是三件事:
第一,建你自己的 L1-L2-L3-L4。
L1 是脑子。只放最热、最小的东西——当天要做的三件事,一个核心原则,一个正在琢磨的问题。别的别往里塞。
L2 是随手能打开的笔记/文件。常用命令、项目状态、决策记录、阅读笔记。不靠脑子靠搜索,打开就能查。速度不比脑子差多少,但容量随便扩。
L3 是能问的人。有些东西不用自己存——这个领域谁熟,直接去问。工程上这叫「不去查数据库,打个 RPC 问别人」,比你自己从头查快多了。
L4 是搜索/文档。深度问题、冷门知识,知道去哪查就行,不用存。
大部分人的问题不是记性差,是 L1 里塞了一堆该放 L2、L3 的东西。
第二,冷启动的时候主动预热。
刚入职、刚进一个新领域、刚接一个新项目——缓存是空的。这时候别指望「边做边学」就能顺畅,边做边学的意思是每个第一个请求都直接砸在数据库上。
正确的做法是:上来先花两天,把所有文档、代码、历史决策都粗读一遍。不是要记住每一个字,是给缓存预热——知道什么东西大概在哪,后面用到的时候 L2 能直接命中。这叫「先跑一遍,不等人敲门」。
第三,控制缓存粒度。
不是什么都缓存。一个完整的结论可以缓存,但一堆零散的原材料,缓存了也白缓存——下次用还得重新组合。
关键是识别:这个东西以后能被复用多少次?只用到一次的东西,不该缓存。用到两次以上的,就该有份模板、有个清单、有一个可以快速调用的位置。
结尾
记性好的人,大多数不是脑子好。是他们的 L2 建设得好——笔记系统到位、文件管理清晰、常用的东西有模板、该查的东西知道去哪查。
他们的大脑不是一台更强的计算机,是一台更会利用缓存的计算机。
下次觉得自己记性差的时候,不用怀疑自己。问一句:这个东西,该放在哪一层?
寒蝉 Hancic

