你可能会说
代码改了但页面还是旧的,是不是缓存没清
把常用数据先放手边,下次就不用再跑一趟
大白话解释
缓存就像你书桌上放的那几本常用书。图书馆里有几万本,但你今天要反复翻同一本,与其每次跑一趟书架,不如先抽出来放手边,随手就能拿到。程序也一样,把反复要用的数据先存在一个更快的地方,下次直接拿,省时间。
它本质上是拿空间换时间:牺牲一点存储,换来快得多的响应。网站首页、热门商品、用户头像,这些短时间内不变的内容,最适合缓存。
但缓存有个绕不开的难题:原始数据改了,手边那份还是旧的,用户就会看到过期内容。所以「什么时候该让缓存失效」是它最容易出事的地方。
什么时候会遇到
- 页面第一次打开很慢,第二次刷一下就出来了,这就是缓存起了作用。
- 改了后台数据,前台还显示旧的,得等一会儿或手动刷新才更新。
- 排查问题时怀疑是不是缓存,第一反应是清缓存再试一遍。
- 接口扛不住流量,同事说加一层缓存顶一顶。
- 让 AI 助手写代码时,顺手给查数据库的地方加个缓存。
可以直接对 Agent 说
「这个查询用户信息的接口访问量很大,帮我加一层内存缓存,设置 5 分钟过期,数据更新时要能主动清掉」
「我更新了数据库里的数据但页面还是旧的,帮我检查是浏览器缓存、服务端缓存还是 CDN 缓存导致的,给出排查步骤」
「帮我把这个函数改成带缓存的版本,同一个参数短时间内重复调用直接返回上次结果」
正文里带下划线的词,是本站其它词条的入口;这一篇自动链了 2 个相关术语。
最容易想岔的地方
常见的错误理解: 缓存就是让网站变快,能缓存的全缓存上
更准确的理解: 缓存最麻烦的不是没命中,是命中了旧数据。每加一处缓存,都要同时想清楚多久算过期、怎么主动清掉
常见的错误理解: 清缓存是万能药,页面不对就清一下
更准确的理解: 经常要靠手动清缓存,说明失效策略没设计好。用户不会清缓存,他们只会觉得你的网站坏了
测一下:真遇到了你会怎么处理
单选 · 选完立刻看解释
你改完 CSS 强制刷新后已经看到新版本,但外地的同事打开还是旧的。
接下来先查哪里?
-
你本机浏览器只是其中一层缓存。别人看到的旧内容,多半还压在中间的某一层上,要一层层往下查。
-
重启只能清掉他自己这一层。如果旧副本在服务器或 CDN 上,重启多少次拿到的还是旧的。
-
没定位到是哪一层在兜旧数据,改文件名属于碰运气,而且会把问题盖住。
题目只考「这个场景下的第一反应」,不考名词背诵 —— 缓存的定义在上面已经讲过了。