跳到正文

缓存

Cache

中级通用

缓存(Cache)是把已获取或计算过的结果暂时留在更容易取到的地方,供后续请求复用。它能减少重复计算和传输、加快响应;比如网站再次打开时,不必重新下载未变化的图片。

你可能会说:「我的网站每次打开都要重新加载相同内容,能不能让它快一点,又不会一直显示旧版本?」

读之前建议先了解

动手看看

查询用户请求应用服务缓存未命中数据库
1

第一次打开某个商品:应用先去缓存里找,没有找到(未命中)。

要点

  1. 1

    先判断结果能否重复使用

    你请求一张商品图片时,如果它和上次一样,直接取之前留下的副本,就省了一次下载。但订单状态会变化,能不能复用旧结果,要看业务能容忍它过时多久。

  2. 2

    找清楚副本放在哪一层

    同一份内容可能缓存在浏览器、CDN 或服务端。因为每层拿到和更新副本的方式不同,所以排查「我改了代码,用户却看不到」时,先确认旧内容来自哪一层。

  3. 3

    约定何时丢弃或更新副本

    缓存通常要配合过期时间、版本变化或主动清除。时间设得太短,提速有限;设得太长,用户可能看到旧内容。上线新文件时,用变化的文件名区分版本,通常比让用户手动清缓存可靠。

容易混淆的地方

缓存和数据库都能保存数据,但分工不同:数据库通常是业务数据的权威来源,缓存留下的是可重取或可重算的副本;丢掉缓存不该丢掉订单本身。CDN 也不等于缓存,它负责把内容分发到靠近用户的节点,缓存是它常用的提速方式。

什么时候用

适合用

  • 网站的图片和脚本很少变化,你想减少重复下载,并让用户再次访问时更快打开页面。
  • 后台首页要展示一份计算较费时、允许短暂延迟更新的汇总数据,你想减少重复计算。
  • 同一批公开资料被频繁查询,你想降低服务端和数据库的重复读取压力。

不适合用

  • 用户刚完成付款,页面需要确认这笔交易是否成功;这次查询直接向权威数据源核实更合适。
  • 某个内部页面一天只查询一次,数据还频繁变化;直接读取数据比维护缓存及更新逻辑更简单。

练一练

你上线了新版网站,自己能看到新页面,但部分用户仍加载旧脚本。接下来最合理的排查方向是什么?

让 AI 帮你做

请为这个网站的静态图片和脚本设计缓存方案:说明浏览器与 CDN 分别缓存什么、内容更新后如何让用户取得新版本,以及上线后怎样确认旧文件来自哪一层。动态的订单状态不要直接复用旧结果。

接下来学什么