1. 缓存基础概念
1.1 什么是缓存
缓存(Cache)是一种将数据存储在临时高速存储介质中的技术,目的是让后续对相同数据的访问能够更快地获取结果。在数据库场景下,缓存通常位于应用程序与持久化数据库之间,保存频繁查询的热点数据,从而减少对底层数据库的直接访问压力。
核心定义:缓存是“以空间换时间”的典型策略——用额外的内存或高速存储空间,换取数据访问的延迟降低与吞吐量提升。
1.2 缓存的作用与价值
缓存的价值可以从三个维度衡量:
| 维度 | 说明 | 典型收益 |
|---|---|---|
| 延迟 | 内存访问延迟通常在微秒级,而磁盘 I/O 在毫秒级 | 读延迟降低 10~100 倍 |
| 吞吐 | 缓存可承载每秒数万至数十万次查询 | 系统 QPS 提升 5~20 倍 |
| 保护 | 缓存吸收突发流量,防止数据库过载 | 数据库连接数减少 60%~90% |
- 加速热点数据读取:用户频繁访问的商品详情、用户信息、配置数据等,直接从缓存返回。
- 减轻数据库负载:缓存命中率在 80%~95% 时,数据库仅需处理少量穿透请求。
- 提升系统可用性:数据库短暂不可用时,缓存仍可提供降级数据,避免全站崩溃。
- 降低响应时间波动:缓存提供稳定的低延迟,避免因数据库慢查询导致的尾延迟抖动。
1.3 缓存与数据库的典型交互模式
缓存与数据库的交互模式决定了系统的一致性与性能特征。以下是四种最基础的交互模式:
1.4 四种模式对比
| 模式 | 读路径 | 写路径 | 一致性 | 适用场景 |
|---|---|---|---|---|
| Cache-Aside | 应用先查缓存,未命中查DB并回填 | 应用写DB后删除/更新缓存 | 最终一致(需处理并发写) | 读多写少,业务逻辑灵活 |
| Read-Through | 缓存组件自动加载DB数据 | 同Cache-Aside | 最终一致 | 标准化缓存加载,减少重复代码 |
| Write-Through | 同Read-Through | 缓存同步写入DB | 强一致(写路径) | 对一致性要求高的写操作 |
| Write-Behind | 同Read-Through | 缓存异步批量回写DB | 弱一致(有窗口期) | 写吞吐极高,可接受短暂不一致 |
实践建议:大多数互联网业务采用 Cache-Aside 模式,因为它实现简单、控制力强。当需要更高写吞吐时,可局部引入 Write-Behind 模式,但必须评估数据丢失风险与一致性窗口。
1.5 缓存失效与一致性问题
缓存与数据库之间天然存在数据不一致的风险,主要源于以下场景:
- 并发写冲突:线程A更新DB后删除缓存,线程B在删除前读取旧缓存。
- 删除缓存失败:DB写入成功但缓存删除操作因网络或超时失败。
- 缓存过期窗口:TTL过期前,缓存数据与DB数据已不一致。
- 异步写回延迟:Write-Behind模式下,DB数据落后于缓存。