网站首页> 文章专栏> redis与mysql数据库数据双写不一致如何解决?
redis与mysql数据库数据双写不一致如何解决?
路人王 天津 2021-12-30 104 0 0

一、高并发执行

1.1 正常情况下

在这里插入图片描述 程序没有问题!!!

1.2 网络卡顿 时间延迟

在这里插入图片描述 数据库真正的结果为6,但是最后改为了10,发现了数据不一致性。

二 解决办法

2.1 写完删除缓存,每次查询数据库

在这里插入图片描述

在这里插入图片描述 又发生了问题!!! 在这里插入图片描述

2.2 延迟双删【不考虑】

在这里插入图片描述 不太确定sleep的时间不确定,不稳定,不能100%解决,延迟很高!!!!吞吐量低!!!

2.3 内存队列【不推荐】

对基于同一个Key的增删改查操作,放到一个内存队列里面,可以解决
性能:麻烦,效率低,并行的任务,串行化了

2.4 加锁操作【推荐】

问题解决:有别的线程来执行,必须等待锁的释放
全部操作,做了一个排队操作,100%不会出现错误
问题:效率低!!!!! 解决:分布式锁,性能低,没办法用,在并发场景下

2.5 Redisson读写锁【强力推荐ReadWriteLock】

读锁与读锁之间不互斥 ,可以并发执行
写锁与写锁会发生互斥,不可以并行
并发场景下,80%场景会发生读操作,20%会发生写操作
底层页实现了LUA脚本
适用于:读多写少的场景

2.6 读多写多的场景

评论

评论  分享  打赏