2  缓存价值与适用场景:延迟优化、流量削峰、成本权衡

缓存是现代分布式系统的核心加速组件,其核心价值可归纳为三个维度:延迟优化、流量削峰和成本权衡。理解这三个维度的边界、分层、数据流与风险,是正确引入缓存的起点。

2.1  边界与适用场景

维度适用场景不适用场景
延迟优化热数据重复读取;数据库查询耗时大于 10ms;跨服务 RPC 调用写入频繁且一致性要求极严;数据变化率 > 80%
流量削峰秒杀、抢票、点赞等突发流量;下游 QPS 受限实时计费、库存扣减等需要强顺序写入
成本权衡内存比磁盘贵但能降低 DB 连接数 & 存储开销;降低 IDC 带宽费数据全量热且访问极少;缓存命中率 < 20%

2.2  分层与组件职责

缓存体系按访问速度与容量形成金字塔分层:

  • L1 进程内缓存:如 HashMap、Guava Cache、Caffeine。职责:纳秒级响应,减少网络开销。
  • L2 分布式缓存:如 Redis、Memcached。职责:毫秒级响应,承载集群共享的热数据。
  • L3 本地磁盘/多级回源:如 SSD、Nginx cache。职责:兜底降级,避免雪崩。
组件职责规约:每个缓存层只负责 副本存储+过期失效,不承担 业务逻辑运算;数据一致性依赖上游写入策略(写直达/写回/写旁路)。
缓存价值与适用场景三角框架 延迟优化 热数据毫秒级响应 流量削峰 突发写入缓冲限流 成本权衡 内存换带宽/DB降级 业务系统 请求 / 写入 / 回源 持久化数据源 DB / 外部服务 适用判定:命中率 > 30%、数据可接受过期、写入 IO 非瓶颈

2.3  数据流 / 控制流与信任链路

以典型读缓存流程为例(Cache-Aside 模式):

  1. 请求到达:业务系统先查询缓存(控制流检查 key 是否存在);
  2. 缓存命中:直接返回数据,链路终止;
  3. 缓存未命中:控制流转向数据源查询,并将结果写入缓存(设置过期时间);
  4. 信任假设:缓存层不保证数据最新,业务层需容忍短暂不一致;写入时先更新数据源再失效缓存(Write-Through 或 Cache-Invalidation)。
信任链路设计原则:缓存永远视为 不可靠加速层,业务逻辑不能依赖缓存中的数据做关键决策;必须配置合理的过期时间与降级策略。

2.4  选型权衡

对比维度RedisMemcachedLocal Cache (Caffeine)
数据结构丰富(String/Hash/List/SortedSet)仅 K/VK/V 支持过期权重
持久化RDB/AOF 可选无无
集群原生 Cluster / Sentinel客户端分片不涉及
适用延迟< 5ms< 3ms< 0.1ms
资源消耗较高(单线程+内存)较低(多线程)极低(嵌入进程)

2.5  风险点与应对

  • 缓存雪崩:大量 key 同时过期 / 实例宕机。应对:过期时间加随机偏移;主备/哨兵集群。
  • 缓存穿透:查询不存在的数据,压力直达 DB。应对:布隆过滤器 + 缓存空值短暂过期。
  • 缓存击穿:热点 key 过期瞬间高并发查询。应对:互斥锁(分布式锁)或本地缓存兜底。
  • 数据不一致:并发写后缓存未及时失效。应对:最终一致性设计 + 消息队列异步失效。

2.6  落地步骤

  1. 识别热点:分析线上请求分布(TOP 5% 的 key 是否占 80% 流量)。
  2. 评估收益:计算缓存命中率 > 30% 后的 DB 负载下降比例。
  3. 选择缓存层:延迟要求纳秒级选本地缓存;毫秒级选 Redis/Memcached。
  4. 配置过期策略:设置 TTL + 随机偏移 20% 避免雪崩。
  5. 部署监控:监控 QPS、命中率、内存使用、OOM 风险。
  6. 逐步切流:先灰度 10% 流量,验证延迟和准确率后全量。
常见误操作:将缓存用于全局锁 / 分布式队列(分布式锁应使用 Redis Redlock);未设置内存上限导致 OOM;缓存 key 设计太长或未压缩。

2.7  验收标准

指标验收目标测量方式
平均延迟优化P99 响应从 50ms 降至 10ms 以下APM 全链路监控
流量削峰能力DB 最高 QPS 下降 70% 以上数据库慢日志 + 缓存流量统计
成本节省DB 实例规格降低 1 级或减少 2 个只读副本云资源账单对比 30 天
缓存命中率核心业务 ≥ 85%,整体 ≥ 60%Redis INFO hits/misses
数据一致性缓存与 DB 最终不一致窗口 ≤ 5 秒定时校验 + 业务补偿日志