当前位置: 首页 > 图灵资讯 > java面试题> 金三银四精选java面试题-Redis如何保证与数据库的双写一致性

金三银四精选java面试题-Redis如何保证与数据库的双写一致性

来源:图灵教育
时间:2023-12-27 10:10:03
 

redis如何保证与数据库的双写一致性

我们来分析一下这道面试题,这道题主要是偏实际应用的

缓存可以提升性能,减轻数据库压力,在获取这部分好处的同时,它却带来了一些新的问题,缓存和数据库之间的数据一致性问题。

想必大家在工作中只要用了咱们缓存势必就会遇到过此类问题,那这道题该如何回答呢?

首先我们来看看一致性:

  • 强一致性:任何一次读都能读到某个数据的最近一次写的数据。
  • 弱一致性:数据更新后,如果能容忍后续的访问只能访问到部分或者全部访问不到,则是弱一致性。

解决双写一致性方案:

  • 延迟双删
    • 延迟双删策略是分布式系统中数据库存储和缓存数据保持一致性的常用策略,但它不是强一致。
    • 实现思路:也是非常简单的,先删除缓存然后更新DB在最后延迟 N 秒去再去执行一次缓存删除
    • 弊端:小概率会出现不一致情况、耦合程度高
  • 通过MQ进行重试删除
    • 更新完DB之后进行删除,如果删除失败则向MQ发送一条消息,然后消费者不断进行删除尝试。
  • binlog异步删除
    • 实现思路:低耦合的解决方案是使用canal。canal伪装成MySQL的从机,监听主机mysql的二进制文件,当数据发生变化时发送给MQ。最终消费进行删除