MST

星途 面试题库

面试题:缓存设计之缓存与数据库双写一致性基础策略

在后端开发中,为了保证缓存与数据库的双写一致性,常见的策略有先更新数据库再更新缓存、先删除缓存再更新数据库、先更新数据库再删除缓存,请简要分析这三种策略各自的优缺点。
41.8万 热度难度
后端开发缓存设计

知识考点

AI 面试

面试题答案

一键面试

先更新数据库再更新缓存

  • 优点
    • 数据一致性实现相对简单,逻辑直接,按照先持久化数据到数据库,再同步更新缓存,易于理解和实现。
  • 缺点
    • 并发问题:在高并发场景下,如果两个请求同时进行更新操作,第一个请求更新了数据库,但还未更新缓存,第二个请求更新了数据库并更新了缓存,此时第一个请求更新缓存,就会导致缓存中的数据是旧数据,出现数据不一致。
    • 性能问题:每次更新都要操作数据库和缓存,增加了系统开销,降低了整体的响应速度。

先删除缓存再更新数据库

  • 优点
    • 并发场景优势:在并发场景下,相比先更新数据库再更新缓存,减少了缓存数据不一致的概率。因为先删除缓存,后续读取时会从数据库加载最新数据并写入缓存。
    • 性能方面:只需要先删除缓存,再操作数据库,相比双写操作,性能上有一定提升。
  • 缺点
    • 数据不一致风险:如果在删除缓存后,更新数据库操作失败,而此时有其他请求读取数据,会从数据库读取到旧数据并写入缓存,导致数据不一致。
    • 缓存穿透:在高并发情况下,当删除缓存后,数据库更新前,大量请求同时查询该数据,都去查询数据库,可能导致数据库压力瞬间增大,甚至引发缓存穿透问题。

先更新数据库再删除缓存

  • 优点
    • 并发一致性较好:在并发场景下,先更新数据库保证了数据的持久化,然后删除缓存,后续读取时从数据库加载最新数据到缓存,相比其他两种策略,能更好地保证数据一致性。
    • 性能与一致性平衡:相对先更新数据库再更新缓存,减少了一次缓存写操作,性能有所提升;同时相比先删除缓存再更新数据库,降低了因数据库更新失败导致的数据不一致风险。
  • 缺点
    • 短暂不一致:在更新数据库和删除缓存之间存在短暂时间窗口,如果在这个窗口内有读取请求,会读到旧的缓存数据。不过这种不一致时间通常较短,在可接受范围内。
    • 缓存雪崩:如果在大量数据同时过期或被删除缓存时,同时有大量请求读取数据,都去查询数据库,可能引发缓存雪崩,对数据库造成较大压力。