【工程思维】缓存设计:你不是记性差,是没建缓存

12 阅读 1453 字 · 约 5 分钟

我经常被人说记性好。读过的书能复述个大概,见过的人隔了半年还能叫出名字,各种命令行和快捷键张嘴就来。

但我自己知道,我记性一点都不好。手机号码除了自己的,一个都背不出来。昨天中午吃了什么,要想三秒才想起来。上周答应过别人什么事,如果不写下来,忘得干干净净。

后来我琢磨明白了:我记住的那些东西,不是靠脑子好,是靠别的东西在撑着。

问题出在哪

想象你是个数据库。每个请求打进来,你都要去磁盘上翻一遍,再算一遍,再吐出去。一天几百个请求,每个都这么搞,谁也扛不住。

人就是这样的。从「今天中午吃什么」到「这个项目该用什么方案」,从「那个命令的快捷键是什么」到「上次那个人叫什么名字」,每天要做的决策、要调取的记忆,量大得离谱。但大脑只有一个——没有副本,没有只读库,没有 CDN。

更惨的是,人的「内存」还特别小。心理学里有个概念叫工作记忆容量,大概 4 到 7 个组块。同时想超过七个东西,就开始丢。刚想起一个,前一个就没了。

所以不是记性差。是默认配置就这样,谁都差。

工程上怎么解的

工程里遇到这个问题,解法再简单不过:别让每个请求都打到数据库,把高频用、不常变的东西放到离使用者最近的地方。这叫缓存。

但工程里真正厉害的不是「做了缓存」,而是「怎么做的」——

分层缓存。CPU 有 L1、L2、L3 三级缓存,越靠近计算单元越贵、容量越小,但越快。它不是一层缓存就完事了,是三层各放不同热度的数据。

冷启动设计。新系统上线,缓存是空的。如果等第一个请求才去加载,那个用户的体验直接爆炸——这叫缓存击穿。所以系统启动时会做预热:提前把要用的数据都拉进缓存里,不等人来敲门。

缓存粒度。不是什么都缓存。计算结果可以缓存,但原始数据只存一次,用的时候再组合。粒度过粗,一个细节过时了整条废;粒度过细,查起来麻烦。

翻译到生活里

这三个设计原则,翻译过来就是三件事:

第一,建你自己的 L1-L2-L3-L4

L1 是脑子。只放最热、最小的东西——当天要做的三件事,一个核心原则,一个正在琢磨的问题。别的别往里塞。

L2 是随手能打开的笔记/文件。常用命令、项目状态、决策记录、阅读笔记。不靠脑子靠搜索,打开就能查。速度不比脑子差多少,但容量随便扩。

L3 是能问的人。有些东西不用自己存——这个领域谁熟,直接去问。工程上这叫「不去查数据库,打个 RPC 问别人」,比你自己从头查快多了。

L4 是搜索/文档。深度问题、冷门知识,知道去哪查就行,不用存。

大部分人的问题不是记性差,是 L1 里塞了一堆该放 L2、L3 的东西。

第二,冷启动的时候主动预热

刚入职、刚进一个新领域、刚接一个新项目——缓存是空的。这时候别指望「边做边学」就能顺畅,边做边学的意思是每个第一个请求都直接砸在数据库上。

正确的做法是:上来先花两天,把所有文档、代码、历史决策都粗读一遍。不是要记住每一个字,是给缓存预热——知道什么东西大概在哪,后面用到的时候 L2 能直接命中。这叫「先跑一遍,不等人敲门」。

第三,控制缓存粒度

不是什么都缓存。一个完整的结论可以缓存,但一堆零散的原材料,缓存了也白缓存——下次用还得重新组合。

关键是识别:这个东西以后能被复用多少次?只用到一次的东西,不该缓存。用到两次以上的,就该有份模板、有个清单、有一个可以快速调用的位置。

结尾

记性好的人,大多数不是脑子好。是他们的 L2 建设得好——笔记系统到位、文件管理清晰、常用的东西有模板、该查的东西知道去哪查。

他们的大脑不是一台更强的计算机,是一台更会利用缓存的计算机。

下次觉得自己记性差的时候,不用怀疑自己。问一句:这个东西,该放在哪一层?