术语 · 数据与存储

缓存

Cache

暂存经常使用的数据,减少重复计算或远程请求,提升响应速度。

算过一次的,先留在手边

同一个请求,两条路径
第二次快,是因为抄了近道
第一次老老实实查库,并把结果存下来;之后的请求先看缓存,命中就直接返回,省掉重复的计算和查询。

换个角度想

缓存像餐厅的备菜台:热门菜提前备在手边,点单直接出,不用每单都回冷库现取。但备好的菜有保质期——食材换了还端老菜,就要出问题。

同一个榜单被打开一万次,都要现算吗?

  1. 高频请求

    接口热门文章榜

    特点读得多 · 变得少

  2. 这一步不存在——
    每个请求都直奔数据库

    先问缓存:hot-articles 有吗?

    第一次没有(MISS),去数据库算

  3. 一万次请求 = 一万次大查询

    每次 800ms,数据库越来越喘

    算完顺手存一份

    keyhot-articles

    有效期5 分钟

  4. 全员现算高峰期一到,数据库先被拖垮重复的问题,答了一万遍
    直接命中之后的请求 5ms 返回,库只算了一次有效期内,一次劳动万次复用

一个请求进来

什么时候会遇到它

  1. 加速热门内容

    首页榜单、商品详情这类读得多、变得少的数据最适合缓存。

  2. 给数据库减压

    大量重复查询被缓存挡在门外,数据库只服务真正的新问题。

  3. 浏览器也在用

    静态资源缓存在本地,第二次打开网站才那么快。

想一想

后台明明改了商品价格,页面上过了好几分钟才变过来。这多半是什么在起作用?

看答案

旧价格还躺在某层缓存里没过期。这是缓存一致性问题:要么改价时主动清掉对应缓存,要么接受有效期内的短暂旧数据——关键是要明确选了哪种,而不是没意识到缓存的存在。

最容易踩的坑

缓存的代价是「可能旧」。价格、库存、权限这类必须实时准确的数据,要么不缓存,要么改动时主动失效——别让用户拿着过期信息做决定。

⌘K搜索知识库

最近收录

正在载入知识索引…