redis与mysql数据库数据双写不一致如何解决?

一、高并发执行

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 读多写多的场景

猜你喜欢

转载自blog.csdn.net/wyn_365/article/details/121295512