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

发布时间:2024-03-15 13:21:59
 

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

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

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

首先我们来看看一致性:

  • 强一致性
  • 弱一致性

解决双写一致性方案:

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

 
上一篇 高并发场景下我们如何保证幂等性?
下一篇 谈谈缓存穿透、击穿、雪崩的区别,又如何去解决?

文章素材均来源于网络,如有侵权,请联系管理员删除。

标签: Java教程Java基础Java编程技巧面试题Java面试题