当前位置:   article > 正文

Redis和MySQL的双写一致性_redis和mysql的双写一致性是什么

redis和mysql的双写一致性是什么

Redis和MySQL的双写一致性

一致性

一致性就是数据保持一致,在分布式系统中,可以理解为多个节点中数据的值是一致的

  • 强一致性:写入数据后,立马能读到最新的数据
  • 弱一致性:写入成功后,不承诺能立马读到最新的值,也不承诺多久后才能读到最新的值,但是数据在一定时间后能达到一致的状态

双写

操作缓存采用删除缓存而不是更新缓存:

  • 如果缓存的值需要经过复杂计算得到,那么更新缓存频率高的话,会消耗一定的性能在计算上
  • 如果是数据写入db频率比较高的话,数据还没读到,缓存又被更新了

三种方案保证数据库与缓存的一致性

缓存延时双删

  • 先删除缓存
  • 在更新数据库
  • 休眠一会,再删除缓存

为什么需要休眠一会?

同样道理,当线程A删除缓存后,在更新数据库之前,线程B发起一个读请求,读到了未更新的数据并且写入到缓存中,线程A完成数据库更新后,此时出现数据不一致,缓存中的是脏数据,休眠一会再删除缓存,就是为了防止这个脏数据影响到后续的请求

只有休眠时间段,可能有脏数据,一般场景也会接受。但是也存在第二次删除缓存失败的情况。可以给Redis的key设置下过期时间

如果第二次删除缓存失败了怎么办?

除了设置key失效时间外,等key失效了,在写入最新的数据这种方法外,我们可以在缓存删除失败后记录相关的key到消息队列中,异步重试,这样可以缩短等待的时间,毕竟缓存失效时间一般会比消息队列消费的时间长

image-20211129001628171

除了记录删除失败的缓存key这种方式做异步重试外,还可以通过数据库的binlog日志进行异步数据同步

image-20211129001932982

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/165158
推荐阅读
相关标签
  

闽ICP备14008679号