MST
星途 面试题库

面试题:缓存设计之中等难度:缓存与消息队列结合场景下的缓存更新策略

在缓存与消息队列结合构建高吞吐架构时,假设数据在数据库中发生了更新,为保证缓存数据的一致性,有哪些常见的缓存更新策略?请简述每种策略的优缺点。
31.9万 热度难度
后端开发缓存设计

知识考点

AI 面试

面试题答案

一键面试

先更新数据库,再删除缓存

  • 优点:实现简单,大多数场景适用,能保证数据最终一致性。
  • 缺点:存在短暂数据不一致窗口,并发场景下可能先读缓存读到旧数据,再更新数据库成功,导致缓存与数据库数据不一致。

先删除缓存,再更新数据库

  • 优点:在一定程度上减少数据不一致时间,若缓存删除成功,后续读操作会从数据库加载最新数据并更新缓存。
  • 缺点:同样存在数据不一致风险,若删除缓存成功但更新数据库失败,后续读操作会加载到旧数据;且可能出现缓存击穿问题,高并发下旧缓存刚删除,大量请求同时查询数据库。

读写锁/分布式锁

  • 优点:通过锁机制确保数据一致性,能有效避免并发读写造成的数据不一致。
  • 缺点:引入锁会增加系统复杂度和性能开销,锁竞争激烈时会降低系统吞吐量。

异步更新缓存

  • 优点:利用消息队列异步处理缓存更新,不影响主业务流程,提高系统响应速度和吞吐量。
  • 缺点:增加系统复杂性,需处理消息队列相关问题如消息丢失、重复消费等,且存在数据一致性延迟。