缓存一致性问题

文章探讨了开发中缓存一致性问题,比较了双写模式和失效模式的优缺点,提出通过设置过期时间或加锁来解决,最终推荐使用Canal结合binlog实现强一致性。此外,Canal在处理数据异构场景中的应用也被提及。
摘要由CSDN通过智能技术生成

在开发中我们为了提高查询效率,经常使用缓存(典型的缓存技术redis),但是在缓存的使用中我们经常遇到缓存和一致性问题(缓存的数据和数据库的数据不一致)

常见的解决方式
        1.双写模式:更新数据库时候同时更新缓存

        2.失效模式:更新数据的时候删除缓存

但是不管那种模式在并发情况都会有问题:        双写模式问题:在并发写的情况由于卡顿或者其他原因导致线程2线先执行完毕,线程一写入的缓存就没有线程2最新的数据,此时就出现了脏数据

        失效模式问题:在写写读的情况同样会造成脏数据

 

   问题解决办法:

                1.给缓存加入过期时间,达到最终的一致性,这种解决需要能容忍一定时间的数据不一致

                2.加锁达到一致,这种解决方式会导致并发降低

     注意:不管是那种解决方式都会有一点瑕疵,如数据的最终一致性(短时间内数据不同),加锁降低并发

最终解决方式:如果在开发过程中为了效率必须使用缓存同时必须保证缓存的数据的一致性(强一致),可以使用Canal(阿里巴巴开源)+binlog(数据库日志),通过让Canal监听binlog的修改来保证数据的一致性。

 

 

 补充:Canal在实际开发中经常用于数据的异构处理(就是不同的用户展示的数据不一致,比如:一些购物类的网站,会根据用户的访问习惯在首页推荐不同的商品)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值