当前位置:网站首页>MySQL和Redis的双写一致性
MySQL和Redis的双写一致性
2022-07-29 01:58:00 【Meme_xp】
什么是双写一致性问题?
先看看我们redis读取过程:
(1)先读cache,如果数据命中则返回
(2)如果数据未命中则读db
(3)将db中读取出来的数据入缓存
策略1:先更新缓存,再更新数据库
如果跟新缓存成功更新数据库失败,那么就会造成缓存脏数据
策略2:先更新数据库,再更新缓存
高并发会出现这种情况:

线程A跟新数据库,由于网络或者其他原因,这个时候没有来得及跟新缓存的时候,线程跟新了数据库,并且跟新了缓存,但是A 又跟新了缓存。导致我们的线程B跟新丢失
策略3:先删除缓存,再更新数据库
先删除缓存再跟新数据库,这种就是以及缓解了策略2的缓存跟新丢失情况,但是依然可能不一致
A要删除缓存,B去读操作,发现再redis中没有命中,所以B线程要去数据库中读取,并将这个数据写到redis中,然后线程A完成对数据库的跟新,就出现了数据库和redis缓存不一致的情况

如何解决:
只需要在线程A完成数据库跟新后,再删除 一次缓存,这就叫做延迟双删,这里的延迟时间一定要大于我们的业务的读取的时间
策略4:先更新数据库,再删除缓存
当我们A查询数据,正准备写入缓存的时候,线程B更新了数据库,然后执行了删除缓存的操作,然后A才把之前的旧值写入到redis。出现概率很低,因为写操作时间大概率大于读操作时间
解决方法:
延迟双删,但是删除失败怎么办?
那就不断地循环删除了,我们可以将要删除的key放入队列,然后重复尝试删除,直到成功
边栏推荐
- Installation guide for proftpd Secure FTP server with TLS encryption enabled
- 即时通讯场景下安全合规的实践和经验
- Time pit in MySQL driver
- The first of the five tips for using browsers efficiently is the most practical
- Eight practical new functions of es2022
- 详解异步任务:任务的状态及生命周期管理
- 千万不要把Request传递到异步线程里面,有坑
- 数据安全与隐私计算峰会-安全求交集在隐私计算中的发展和应用:学习
- 手把手教你安装VSCode(附带图解步骤)
- Exploration and practice of network security vulnerability management
猜你喜欢

Interprocess communication - detailed explanation of the pipeline (explanation of graphic cases)

Installation guide for proftpd Secure FTP server with TLS encryption enabled

3d智能工厂工艺流转可视化交互展示应用优点

我被这个浏览了 746000 次的问题惊住了

无线振弦采集系统工作流程

“12306”的架构到底有多牛逼?

响应式织梦模板装修设计类网站

How to quickly design a set of cross end components that support rendering rich text content

WebView attack
![[quality] code quality evaluation standard](/img/33/2c2256fd98b908ddaf5573f644ad7f.png)
[quality] code quality evaluation standard
随机推荐
Read the recent trends of okaleido tiger and tap the value and potential behind it
ResNet50+k折交叉验证+数据增强+画图(准确率、召回率、F值)
[quality] code quality evaluation standard
Branch management practice of "two pizza" team
即时通讯场景下安全合规的实践和经验
响应式织梦模板装修设计类网站
ES6事件绑定(v-on用法)
Thermistor temperature calculation formula program
Awvs cannot start problem
Eight practical new functions of es2022
4年测试经验,好不容易进了阿里,两个月后我选择了裸辞...
Responsive dream weaving template home decoration website
Prometheus + alertmanager message alert
详解异步任务:任务的状态及生命周期管理
[mqtt from introduction to improvement series | 09] Wireshark packet capturing and analyzing mqtt messages
外包公司“混”了2年,我只认真做了5件事,如今顺利拿到字节 Offer。
实验二:Arduino的三色灯实验
Talk about 11 tips for interface performance optimization
I was stunned by this question that I browsed 746000 times
Three methods of STM32 delay function