什么是缓存?

缓存是一种机制,旨在通过在高速存储层中存储数据子集减少延迟和计算开销。这使得对该数据的后续请求的处理速度比从其主要(且速度较慢)源获取数据的速度快得多。


现实世界的例子

平台 使用案例 效益
谷歌搜索 缓存常见查询的结果(例如“天气”) 避免为每次搜索重新运行昂贵的排名算法
Netflix 边缘站点的 CDN(内容交付网络) 通过从最近的服务器提供视频来最大限度地减少缓冲
X(推特) 将“热门话题”存储在 Redis 等内存存储中 避免实时分析数十亿条推文

🌦 缓存 Google 天气数据

此示例演示了用于处理缓慢变化数据的高频请求的**Cache-Aside(延迟加载)**策略。


🛠 工作流程

  1. 用户请求: 用户搜索“伦敦天气”
  2. 缓存查找: 后端检查 Redis(内存存储) 是否有键 weather_london
    • 缓存命中:找到数据→在<1ms内返回
    • **缓存未命中:**数据丢失/过期 → 转到步骤 3
  3. Heavy Lift:外部天气 API(例如 OpenWeather)获取新数据
    • 慢(~500ms)
    • 每个请求可能会产生费用
  4. 更新缓存: 将新数据存储在 Redis 中,TTL(生存时间) = 15 分钟
  5. 响应: 返回天气数据给用户

关键技术概念

  • TTL(生存时间): 确保数据过期(例如,防止显示过时的天气)
  • 成本优化: 而不是 1,000,000 次 API 调用 → 仅 每 15 分钟 1 次调用(~96/天)
  • 高可用性:如果API失败,系统仍然可以提供最后缓存的数据

什么是 CDN?

内容交付网络 (CDN) 是一个全球分布式服务器网络,用于存储内容(视频、图像、静态文件)的缓存副本。

当您点击播放时,数据从最近的服务器传输,而不是遥远的源→更快的加载时间。


案例研究:Netflix 和 CDN

Netflix 使用名为 Open Connect 的自定义 CDN 来高效交付数十亿小时的内容。


运作原理(边缘策略)

  1. 预测加载: Netflix 预测用户会观看什么并在非高峰时段推送内容
  2. 本地存储: 在 ISP 数据中心内使用 OCA(开放式连接设备)
  3. 缩短路径: 从附近的服务器而不是 Netflix 总部传输视频

CDN 缓存的好处

  • **低延迟:**减少用户和数据之间的物理距离
  • ISP 效率: 保持本地网络内的大量流量
  • 高可用性: 自动故障转移到附近的服务器

技术逻辑:自适应比特率缓存

Netflix 将内容缓存在跨多个质量级别的小块中:

品质 比特率 使用案例
4K/超高清 稳定光纤/以太网
1080p / 高清 中等 家庭无线网络
480p/标清 弱网络/移动

播放器根据互联网速度动态切换质量(自适应比特率流


缓存级别

A. 网络层

  • CDN: 在边缘服务器上缓存静态资源(图像、视频、JS/CSS)
  • DNS 缓存: 浏览器、操作系统和 ISP 缓存 IP 以避免重复查找

CDN 工作

  1. 用户访问网站→浏览器发送DNS请求

  2. 请求被路由到最近的 PoP(存在点/边缘服务器)

  3. 路由依据:

    • 地理位置
    • 网络延迟
  4. 在 PoP 处:

    • 缓存命中→快速响应
    • 缓存未命中→从源服务器获取
  5. 缓存未命中时:

    • 原始服务器获取数据
    • 存储在缓存中
    • 服务于用户

DNS 工作

域名系统 (DNS) 将域名转换为 IP 地址。

步骤:

  1. 浏览器将 DNS 查询 发送到 递归解析器 (ISP)
    2.解析器检查本地缓存

    • 找到→返回IP
  2. 如果没有找到:

    • 查询根DNS服务器
  3. 根 → 返回 TLD 服务器(.com、.org)

  4. 解析器 → 查询 TLD 服务器

  5. TLD → 返回权威名称服务器

7.解析器→查询权威服务器→获取实际IP

  1. 解析器:
    • 将IP返回给浏览器
    • 缓存结果

B. ⚙ 硬件级别

  • CPU 缓存: L1、L2、L3 → CPU 内部超快速访问
  • RAM: 主存储器(快速但易失)
等级 组件 速度 产能 波动性 范围
L1 缓存 1 级 最快 ~64 KB 挥发性 每核心
二级缓存 2 级 非常快 ~256 KB–1 MB 挥发性 每核心
L3 缓存 3 级 ~2–50 MB 挥发性 共享
内存 主内存 中等 8–128 GB+ 挥发性 系统
磁盘/SSD 存储 256 GB–10 TB+ 非挥发性 坚持不懈
网络(网卡) 外部 最慢 无限 不适用 全球

后端上下文

技术:

  • Redis
  • Memcached
  • AWS ElastiCache

这些提供:

  • 内存存储
  • NoSQL 数据库
  • 键值存储

缓存策略

1) 惰性缓存(Cache-Aside)

缓存仅在请求数据时发生

流程:

  • 请求→检查缓存
  • 命中→返回数据
  • 未命中→从数据库获取→存储在缓存中→返回

最常用的策略


2) 直写式

数据同时写入缓存+数据库

流程:

  • 写操作(POST/PUT/PATCH)
  • 一起更新数据库+缓存

好处:

  • 缓存始终保持一致且新鲜

3) 驱逐政策

定义缓存如何处理内存限制

为什么需要?

缓存大小有限 → 满时必须删除旧数据


类型:

  • 不驱逐:
    缓存已满→新写入失败

  • LRU(最近最少使用):
    删除最近最少访问的数据

  • LFU(最不常用):
    删除最不常访问的数据

  • 基于 TTL:
    根据过期时间删除数据


其他见解

何时不使用缓存:

  • 高度动态的数据(例如股票价格、实时系统)
  • 敏感数据(没有适当的安全控制)
  • 低读、高写系统