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

一、高并发执行

1.1 正常情况下

redis与mysql数据库数据双写不一致如何解决?_第1张图片
程序没有问题!!!

1.2 网络卡顿 时间延迟

redis与mysql数据库数据双写不一致如何解决?_第2张图片
数据库真正的结果为6,但是最后改为了10,发现了数据不一致性。

二 解决办法

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

redis与mysql数据库数据双写不一致如何解决?_第3张图片

redis与mysql数据库数据双写不一致如何解决?_第4张图片
又发生了问题!!!
redis与mysql数据库数据双写不一致如何解决?_第5张图片

2.2 延迟双删【不考虑】

redis与mysql数据库数据双写不一致如何解决?_第6张图片
不太确定sleep的时间不确定,不稳定,不能100%解决,延迟很高!!!!吞吐量低!!!

2.3 内存队列【不推荐】

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

2.4 加锁操作【推荐】

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

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

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

2.6 读多写多的场景

你可能感兴趣的:(面试,mysql,Redis,数据库,redis,mysql)