目录

三级缓存架构

三级缓存架构

三级缓存架构是一种通过分层缓存设计来优化系统性能、降低数据库负载、提高数据访问效率的解决方案,尤其适用于高并发、高吞吐量的业务场景(如电商、社交平台、实时推荐等)。其核心思想是通过多级缓存逐层过滤请求,减少对底层存储的直接访问。以下是三级缓存的详细解析:


三级缓存架构组成

通常包含以下三个层级,每层承担不同的角色:

层级定位典型技术方案特点
一级缓存(本地缓存)进程内缓存Caffeine、Ehcache、Guava Cache访问速度最快,但数据不共享,容量有限
二级缓存(分布式缓存)集群共享缓存Redis、Memcached数据全局共享,容量较大,速度次于本地缓存
三级缓存(持久化存储)数据最终存储层MySQL、PostgreSQL、MongoDB数据持久化,访问速度最慢,可靠性最高

三级缓存协作流程

1. 数据读取流程

客户端

一级缓存(本地)

二级缓存(Redis)

三级存储(DB)

  1. 读取本地缓存

直接返回数据

  1. 读取分布式缓存

返回数据

异步回填本地缓存

  1. 读取数据库

返回数据

异步回填分布式缓存

异步回填本地缓存

alt

[命中]

[未命中]

alt

[命中]

[未命中]

客户端

一级缓存(本地)

二级缓存(Redis)

三级存储(DB)

2. 数据写入流程

客户端

一级缓存(本地)

二级缓存(Redis)

三级存储(DB)

  1. 写入数据库

确认写入成功

  1. 失效/更新分布式缓存

  2. 广播失效本地缓存(如MQ通知)

客户端

一级缓存(本地)

二级缓存(Redis)

三级存储(DB)


各级缓存核心作用

1. 一级缓存(本地缓存)
  • 目标 :拦截80%以上的高频重复请求。
  • 特点
    • 超高性能 :直接内存操作,纳秒级响应。
    • 数据隔离 :每个服务实例独立缓存,无一致性风险。
    • 容量限制 :基于LRU/LFU策略淘汰数据。
  • 适用场景 :静态配置、热点数据(如商品基本信息)。
2. 二级缓存(分布式缓存)
  • 目标 :减少对数据库的直接访问,解决本地缓存数据不一致问题。
  • 特点
    • 数据共享 :全局统一视图,支持集群访问。
    • 高可用 :Redis Cluster、Sentinel保障服务可用性。
    • 灵活性 :支持复杂数据结构(如Hash、SortedSet)。
  • 适用场景 :会话数据、排行榜、分布式锁。
3. 三级缓存(持久化存储)
  • 目标 :数据持久化,作为最终数据源。
  • 特点
    • 强一致性 :ACID事务保障数据正确性。
    • 海量存储 :支持TB/PB级数据。
    • 复杂查询 :通过索引优化复杂检索。
  • 适用场景 :订单记录、用户账户信息。

三级缓存架构优势

  1. 性能极致优化
    • 热点数据命中本地缓存,降低网络开销。
    • 分布式缓存扛住大部分读请求,保护数据库。
  2. 系统高可用
    • 缓存层故障时,数据库仍可兜底。
    • 多级缓存避免单点故障引发的雪崩。
  3. 资源利用率提升
    • 本地缓存节省分布式缓存带宽。
    • 数据库连接池压力显著降低。

实践案例:电商商品详情页

场景需求
  • 每秒10万次商品信息查询。
  • 数据更新频率低(商品价格日均更新1次)。
缓存策略
  1. 一级缓存 :Caffeine缓存商品基础信息(TTL=5分钟,最大条目10万)。
  2. 二级缓存 :Redis缓存商品详情JSON(TTL=1小时,集群分片)。
  3. 三级存储 :MySQL存储商品SKU、库存、价格。
更新同步方案
  • 价格变更时
    1. 更新MySQL数据库。
    2. 删除Redis中对应Key。
    3. 通过消息队列(如Kafka)广播失效所有服务的本地缓存。

注意事项与常见问题

1. 缓存一致性
  • 最终一致性 :允许短暂不一致,通过TTL自动过期或消息通知失效。
  • 强一致性方案 (慎用):
    • 分布式锁(Redis RedLock)保证原子更新。
    • 数据库与缓存双写事务(性能代价高)。
2. 缓存穿透
  • 问题 :恶意查询不存在的数据,击穿缓存直达数据库。
  • 解决方案
    • 布隆过滤器(Bloom Filter)拦截非法Key。
    • 缓存空值( NULL ),设置短TTL。
3. 缓存雪崩
  • 问题 :大量缓存同时失效,请求压垮数据库。
  • 解决方案
    • 随机化缓存过期时间(如基础TTL±随机值)。
    • 热点数据永不过期,后台异步更新。
4. 缓存预热
  • 策略 :系统启动时加载高频数据到缓存。
  • 实现
    • 定时任务扫描数据库热点数据。
    • 结合历史访问日志预测预热内容。

架构扩展:四级缓存

在超大规模场景下可引入 CDN缓存 作为第零级缓存:

  1. CDN :缓存静态HTML/JSON(边缘节点加速)。
  2. 本地缓存 :应用服务器内存。
  3. 分布式缓存 :Redis集群。
  4. 数据库 :MySQL分库分表。

总结

三级缓存架构通过分层设计平衡性能、一致性与复杂度,是应对高并发场景的经典方案。实际应用中需结合业务特点灵活调整各级缓存策略,并辅以监控工具(如Prometheus + Grafana)持续优化命中率和响应时间。