什么是缓存(Cache)
一句话定义
缓存是一种高速数据存储层,用于临时保存数据的副本,使后续对同一数据的请求能比访问原始存储位置更快地被响应。核心思路是「用空间换时间」:用昂贵的快速存储换取访问延迟的下降。(来源:AWS Caching Overview、Fastly)
核心原理
- 缓存之所以有效,依赖程序局部性原理:
- 时间局部性:某数据一旦被访问,短时间内大概率会被再次访问
- 空间局部性:某数据被访问时,其邻近数据大概率也会被访问
- 典型工作流程:首次请求 → 未命中(cache miss)→ 从源读取并存入缓存 → 后续请求命中(cache hit)→ 直接返回缓存数据
- 性能指标:命中率(hit rate)、未命中开销、访问延迟
- 本质是「容量换速度」的权衡:缓存通常只保存数据子集,数据是瞬态(transient)的
计算机体系中的缓存(CPU 缓存)
现代处理器内部是多级缓存层级(Cache Hierarchy):
- L1 缓存:最顶层,极小(约 32KB
64KB),极快(13 个时钟周期),指令/数据分离,每核独有 - L2 缓存:中等(约 512KB
2MB),较快(1015 周期),承接 L1 溢出数据 - L3 缓存:共享大容量(约 32MB
256MB),较慢(4060 周期),多核共享,兼作核间通信 - 主存(RAM/DDR):GB 级,极慢(300~400 周期)
- 物理原因:光速与 RC 线延迟决定了「大容量必然慢」,多级缓存就是用统计规律模拟出「又大又快又便宜」的假象
- 硬件实现:缓存多用昂贵但高速的 SRAM,主存用廉价 DRAM
网络与 Web 中的缓存
HTTP 缓存(浏览器缓存)
- 浏览器缓存减少不必要的网络请求,所有主流浏览器均支持
- 关键响应头 Cache-Control:
Cache-Control: max-age=120表示资源可缓存 120 秒Cache-Control: no-cache表示每次使用前必须向服务器重新验证- 还有
no-store、must-revalidate等指令
- 资源校验机制:
- ETag:资源内容指纹,配合请求头
If-None-Match做条件请求 - Last-Modified:资源最后修改时间,配合
If-Modified-Since - 服务器验证未变化 → 返回 304 Not Modified(体积极小),浏览器继续用本地缓存;变化 → 返回完整新资源
- ETag:资源内容指纹,配合请求头
CDN 缓存
- CDN(内容分发网络)在靠近用户的边缘节点缓存静态资源副本
- 好处:降低用户等待延迟(latency)、减少源站流量与带宽成本(egress 费用)
- 常见缓存对象:图片、CSS/JS、视频等静态资产
DNS 缓存
- 域名解析结果会被各级 DNS 服务器和操作系统/浏览器缓存,避免重复向上级查询
- 通过 TTL(生存时间)控制缓存有效期
应用层缓存
- 内存缓存:Redis、Memcached 等,键值存储热点数据,供应用快速读写
- 数据库缓存:数据库自身的 buffer pool / 查询缓存,加速重复查询
- 浏览器本地存储:localStorage、sessionStorage、IndexedDB 等
缓存淘汰与失效策略
- 缓存容量有限,满了需要淘汰旧数据:
- LRU(Least Recently Used,最近最少使用):优先淘汰最久未使用的条目,是最常用策略(如操作系统内存页置换)
- LFU(Least Frequently Used,最不经常使用):优先淘汰使用频率最低的条目
- 其他:FIFO(先进先出)、TTL 过期、随机淘汰等
- 缓存失效(Cache Invalidation):源数据变化后必须让缓存失效,否则用户看到旧数据
- 主动失效:更新数据时删除/更新对应缓存
- 组失效:整组数据变化时批量失效(如新闻网站政治板块整体更新)
- 过期失效:依赖 TTL 自然过期
- 缓存一致性是分布式系统的经典难题(”计算机科学只有两件难事:缓存失效和命名”)
常见问题与权衡
- 缓存雪崩:大量缓存同时过期导致请求全部打到数据库
- 缓存穿透:查询不存在的数据,每次都绕过缓存直击数据库
- 缓存击穿:热点 key 失效瞬间高并发打爆后端
- 解决方案:随机过期时间、布隆过滤器、互斥锁/单飞等
参考资料
- AWS - Caching Overview: https://aws.amazon.com/caching/
- Fastly - What is caching?: https://www.fastly.com/learning/cdn/what-is-caching
- web.dev - Prevent unnecessary network requests with the HTTP Cache
- Redis - Understanding cache invalidation
- 百度百科 - 缓存
- ChipFoundryServices - Cache Hierarchy Memory Hierarchy
(内容由AI生成,仅供参考)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 琉璃幻彩的博客!
评论

