MST

星途 面试题库

面试题:Redis缓存减轻MySQL读压力:缓存更新策略

在利用Redis缓存减轻MySQL读压力时,常用的缓存更新策略有哪些?请分别阐述其优缺点。
19.9万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

缓存更新策略及优缺点

  1. Cache-Aside Pattern(旁路缓存模式)
    • 操作方式
      • 读操作:先从缓存读取数据,若缓存命中则直接返回;若缓存未命中,从数据库读取数据,将数据写入缓存,并返回数据。
      • 写操作:先更新数据库,然后删除缓存。
    • 优点
      • 实现简单,应用程序对缓存和数据库的控制逻辑清晰,大多数场景适用。
      • 读操作性能高,因为大部分读请求可以直接从缓存获取数据。
    • 缺点
      • 写操作存在数据库和缓存数据不一致风险。在高并发场景下,写数据库和删缓存操作非原子性,可能出现写数据库完成但删缓存失败,导致数据不一致。
      • 频繁写操作会导致缓存命中率下降,因为每次写操作后都删除缓存,后续读操作可能需要从数据库重新加载数据到缓存。
  2. Read/Write Through Pattern(读写穿透模式)
    • 操作方式
      • 读操作:先从缓存读取数据,若缓存命中则直接返回;若缓存未命中,由缓存服务从数据库读取数据,写入缓存,并返回数据。
      • 写操作:先更新缓存,缓存服务再同步更新数据库。
    • 优点
      • 应用程序只需与缓存交互,简化了代码逻辑。
      • 数据一致性相对较好,因为缓存和数据库的更新操作由缓存服务保证原子性。
    • 缺点
      • 缓存服务压力较大,每次读写操作都要与数据库交互,可能成为性能瓶颈。
      • 缓存服务实现复杂,需要处理与数据库的同步更新逻辑,对缓存服务可靠性要求高。
  3. Write Behind Caching Pattern(写后缓存模式,也叫异步缓存写入)
    • 操作方式
      • 读操作:与其他模式类似,先从缓存读取数据,若命中则返回,否则从数据库读取并写入缓存。
      • 写操作:只更新缓存,将数据库更新操作异步化,缓存服务在合适时机批量更新数据库。
    • 优点
      • 写操作性能极高,因为直接返回,无需等待数据库更新完成,适合高并发写场景。
      • 可以批量更新数据库,减少数据库I/O次数,提高数据库性能。
    • 缺点
      • 数据一致性最差,数据库更新存在延迟,在缓存更新后到数据库更新完成这段时间内,数据不一致。
      • 实现复杂,需要处理异步任务和缓存与数据库数据一致性的恢复机制,若缓存服务宕机,可能导致数据丢失或不一致。