MST

星途 面试题库

面试题:Redis缓存与MySQL数据一致性问题在高并发读多写少场景中的处理

在高并发的读多写少场景下,Redis缓存和MySQL数据库的数据一致性是一个关键问题。请说明有哪些策略可以保证两者的数据一致性,每种策略的优缺点是什么,并且如何根据业务场景进行选择。
24.4万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

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

  • 优点
    • 实现简单,在大多数场景下能保证数据一致性。写入操作时先更新数据库,确保数据持久化,再删除缓存,下次读取时会从数据库加载最新数据并更新到缓存。
  • 缺点
    • 存在并发问题。在高并发场景下,写操作删除缓存前,读操作可能读到旧数据。例如,写操作更新数据库后,还未删除缓存,此时读操作从缓存读取到旧数据。
  • 适用场景
    • 对一致性要求不是极高,允许短时间内存在数据不一致情况的业务场景,如一些展示类页面,偶尔出现短暂数据不一致不影响整体业务。

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

  • 优点
    • 理论上能快速让缓存失效,后续读操作能促使从数据库加载新数据到缓存,相对及时保证数据一致性。
  • 缺点
    • 存在数据不一致风险。若删除缓存后,更新数据库操作失败,而此时读操作已从数据库读取旧数据更新到缓存,就会导致缓存和数据库数据不一致。同时也有并发问题,比如删除缓存后,更新数据库前,读操作将旧数据重新加载到缓存。
  • 适用场景
    • 业务场景允许一定时间的数据不一致,并且更新数据库操作成功率较高的情况,例如某些非关键业务数据的更新场景。

3. 基于订阅 - 发布模式

  • 优点
    • 解耦了数据库和缓存的更新操作。通过消息队列等中间件,数据库更新操作完成后发送消息,订阅者接收到消息后更新缓存,能有效保证数据一致性,且系统扩展性较好。
  • 缺点
    • 增加了系统复杂度,需要引入消息队列等组件,增加了维护成本。同时存在消息丢失等风险,若消息丢失可能导致缓存未及时更新。
  • 适用场景
    • 对数据一致性要求较高,且系统有能力承担引入消息队列等组件带来的复杂度提升的场景,如金融相关业务数据的一致性维护。

4. 双写一致性方案

  • 优点
    • 写操作时同时更新数据库和缓存,能最大程度保证数据一致性。
  • 缺点
    • 性能开销大,每次写操作都要同时操作数据库和缓存,可能影响系统整体性能。并且存在缓存和数据库更新不同步的风险,如网络等原因导致一个更新成功,另一个失败。
  • 适用场景
    • 对数据一致性要求极高,且写操作频率相对较低,性能可以接受双写开销的业务场景,如核心业务数据的修改场景。