缓存入门:为什么第二次打开更快

举报
yd_216009296 发表于 2026/11/05 06:05:23 2026/11/05
【摘要】 很多人都有过这样的体验:第一次打开一个网页要等好几秒,关掉再打开却几乎是瞬间完成;第一次打开应用要加载很久,之后再用就顺滑得多。这并不是网络突然变快了,而是缓存起了作用。理解缓存,就等于理解很多软件“越用越快”背后的原因。缓存说白了就是把算过、拿过的结果先存起来,下次需要时直接取用,不再重新算一遍、重新跑一趟远路。比如浏览器第一次访问一个网站时,会把图片、样式文件这些不太常变的内容存在本地;...

很多人都有过这样的体验:第一次打开一个网页要等好几秒,关掉再打开却几乎是瞬间完成;第一次打开应用要加载很久,之后再用就顺滑得多。这并不是网络突然变快了,而是缓存起了作用。理解缓存,就等于理解很多软件“越用越快”背后的原因。
缓存说白了就是把算过、拿过的结果先存起来,下次需要时直接取用,不再重新算一遍、重新跑一趟远路。比如浏览器第一次访问一个网站时,会把图片、样式文件这些不太常变的内容存在本地;第二次访问时,如果这些内容没有过期,浏览器就直接用本地的副本,省去了重新下载的时间。服务器和程序内部也有类似的缓存:把经常被查询的数据放在离使用者更近、读取更快的地方,查询就不用每次都去翻最底层的数据库。
为什么缓存能省时间呢?因为很多开销都来自重复劳动和远距离传输。查一次数据库要经过网络、解析查询、扫描数据,步骤不少;如果同一个结果一分钟内被问了一百次,每次都完整走一遍就很浪费。把结果放在内存里,读取速度比查数据库快得多,重复查询的代价就降下来了。同样道理,离用户更近的缓存节点可以少走几段网络,图片和视频加载起来自然更快。
不过缓存也有一个天生的麻烦:存起来的结果可能会过期。原数据变了,缓存里的旧副本如果还被当成新的用,用户看到的就是过时的内容。比如商品价格改了,页面却还显示旧价;头像换了,别的地方却还显示旧头像。解决办法是给缓存定一个有效期,过期就重新去取;或者在原数据变化时主动通知缓存把旧副本删掉。有效期定得太长,内容容易过时;定得太短,缓存又起不到省时间的作用,拿捏这个平衡是缓存设计里最常见的考量。
缓存失效还会带来另一个现象,叫缓存穿透和缓存雪崩。穿透是指查询的东西根本不存在,缓存里没有,请求每次都落到数据库上,等于缓存白设了;办法通常是把“不存在”这个结果也短暂记下来,或者先校验请求的合理性。雪崩是指大量缓存同时过期,所有请求一下子涌向数据库,把数据库压垮;办法是让不同缓存的过期时间错开,或者在过期瞬间只放一个请求去刷新,其余请求先等一等。
用好缓存还有几个日常习惯值得注意。第一,分清什么值得缓存:变化慢、读取多的数据最适合,比如配置、分类列表、热门文章;变化快、每人都不一样的数据就不适合,比如实时余额、个人订单状态。第二,缓存不是越大越好:内存有限,存太多不常用的内容反而会挤走常用的内容,定期清理和设置容量上限很有必要。第三,出了问题先想想是不是缓存:改了配置没生效、换了图片还是旧的,很多时候不是代码错了,而是旧缓存还没过期,手动清一次缓存或者等有效期过去,问题就消失了。
缓存的本质其实很朴素:别重复做已经做过的事,别重复跑已经跑过的路。第一次慢一点没关系,把结果妥善存好,第二次就能快很多。明白了有效期、失效和容量这三个关键点,再看各种“越用越快”的软件,就会发现它们背后大多是同一套思路在起作用。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。