什么是缓存?
缓存(Cache),你可以把它理解为"临时小抄"。
想象一下,你每次背单词都要翻字典查一遍。但如果把常错的几个词写在便利贴上,贴在桌角,下次直接看便利贴——这就是缓存的核心思想:把常用的东西放在离你最近的地方,省得每次都重新找。
在计算机世界里,缓存就是这样一个"便利贴系统"。
CPU 从内存读取数据需要几十纳秒,从硬盘读取需要几毫秒。差了一百倍以上。所以 CPU 里面自带了 L1、L2、L3 三级缓存,越靠近 CPU 越快,容量也越小。
浏览器也会缓存图片、CSS 文件。你第二次访问同一个网站,很多资源直接从本地加载,不用重新下载。
缓存有什么用?
缓存解决的根本问题是速度。
没有缓存的世界会怎样?
- 每次打开微信,都要重新加载所有头像和聊天记录图片
- 每次刷新网页,都要重新下载同一张 Logo
- 每次搜索数据,都要从数据库里翻遍所有记录
有了缓存之后:
- 提速:数据从最近的缓存读取,速度提升几倍到几百倍
- 减负:减少数据库、服务器的压力,避免被大量请求打垮
- 省钱:服务器不需要那么多高性能硬件,成本大幅降低
一个典型的 Web 应用,缓存命中率高了之后,响应时间可以从几百毫秒降到几毫秒。
缓存有哪些类型?
缓存不是单一的东西,而是分层存在的。
CPU 缓存:处理器内部的高速存储器,分 L1/L2/L3 三级。L1 最快但只有几 KB,L3 慢一些但有几 MB 甚至更多。
浏览器缓存:你访问过的网页资源会被存在本地。下次再访问时,浏览器先检查缓存,有就用本地的,没有才去服务器下载。
CDN 缓存:内容分发网络在全球各地部署了缓存服务器。你访问网站时,就近从最近的 CDN 节点获取内容,不用绕回源站。
应用层缓存:比如 Redis、Memcached 这些内存数据库,专门用来存热点数据。很多网站的首页、商品列表都靠它们扛住高并发。
数据库查询缓存:把经常执行的 SQL 结果存起来,下次同样的查询直接返回结果,不用重新执行。
每种缓存的层级不同,速度不同,容量也不同。越底层的缓存越快但也越小。
缓存是怎么工作的?
缓存的工作流程其实很简单,就三步:
第一步:检查缓存
收到请求后,先看缓存里有没有要的数据。如果有,直接返回——这叫"缓存命中"。
第二步:取数据
如果缓存里没有,就去原始来源取数据。可能是数据库、可能是远程服务器、也可能是磁盘文件。
第三步:存入缓存
取到数据后,顺便存一份到缓存里。下次再有人要同样的数据,就能直接从缓存拿了。
这里有个关键概念叫缓存过期策略。缓存空间有限,不能无限存下去。常见的策略有:
- LRU(最近最少使用):淘汰最久没被用到的数据
- TTL(存活时间):每个缓存项设置一个有效期,到期自动删除
- LFU(最不频繁使用):淘汰使用次数最少的数据
缓存的缺点
缓存不是万能的,它也有自己的问题。
最大的问题是数据一致性。缓存里的数据和原始数据可能不一样。比如你在电商网站上改了一个商品价格,但用户看到的还是缓存里的旧价格。这就叫"缓存不一致"。
另一个问题是缓存雪崩。如果大量缓存同时过期,所有请求瞬间打到数据库上,数据库可能就扛不住了。
所以实际应用中,通常会结合多种策略来平衡速度和一致性。
总结
缓存是计算机世界里的"偷懒智慧"——既然某些东西经常被用到,为什么不提前准备好呢?
从 CPU 内部的纳米级缓存,到全球分布的 CDN 节点,缓存无处不在。它让互联网变得更快、更便宜、也更稳定。
下次你发现某个 App 打开特别快,或者网页刷新瞬间完成,那背后很可能就有缓存在默默干活。
想了解具体的缓存工具怎么用?去看看我们的 CDN 原理详解。