当前位置:网站首页>数据一致性:双删为什么要延时?
数据一致性:双删为什么要延时?
2022-08-03 21:36:00 【薪升贷农名工】
为了保证redis和MySQL数据的一致性,我们知道要进行延时双删,具体原因分析参考Redis和MySQL保持数据一致性
简单说一下延时双删的原理:
先进行redis删除,然后写入数据库,等待一段时间后再进行redis删除
原理自不必说,问题在于在写入数据库后为什么要延迟一段时间再删除redis而不能直接删除?
事务1进行数据库写入,当有其他事务2在A时间段内进行查询操作时,因为这时候数据库还没写入,这时候事务2读到的是旧数据。如果事务1在写入数据库后直接进行redis的删除,这时候事务2在事务1最后删除redis后更新了redis,那么这样就导致了数据不一致。以后每次读取时读到的都是脏数据直到redis过期。
出问题的原因是什么,就是因为有事务2在A时间段内读取数据库时,在其他时间段内都不会发生不一致的问题。
- 在事务1第一次删除redis前:这时候读取到的本身就是旧数据
- 在事务1写入数据库后即B时间段,这时候读到的是新数据
因此我们要保证所有在A时间段内读取数据库的事务在更新redis后,事务1能够将redis删除。
只要设置延时时间为事务2的请求时间,这时候保证事务1在最后删除redis前,事务2已经更新了redis,保证了事务2的更新redis操作发生在事务1最后删除redis操作前。
事务3即增加了延迟操作,保证最后redis删除时可以将所有的事务2的redis删除,这样就保证了最终的redis和MySQL数据的一致性
边栏推荐
- CAS:1260586-88-6_Biotin-C5-Azide_Biotin-C5-Azide
- 从0到1看支付
- 【进阶自动化测试】一文1000教你如何用Postman做接口自动化测试
- CAS:1260586-88-6_生物素-C5-叠氮_Biotin-C5-Azide
- template string
- 这几个常用 alias,带你高效做事(下)
- A. Color the Picture- Codeforces Round #810 (Div. 1)
- CAS:908007-17-0_Biotin-azide _生物素叠氮化物
- D - Project Planning--二分
- buildscript和allprojects的作用和区别是什么?
猜你喜欢
Five Steps to Detect and Control Shadow IT
1 秒完成授权,Authing 全新上线一键登录功能
Zero trust, which has been popular for more than ten years, why can't it be implemented?
基于DMS的数仓智能运维服务,知多少?
Use setTimeout to realize setInterval
字节跳动软件测试岗,前两面过了,第三面HR天坑,结局透心凉...
6. XML
不专业面试官的经验总结
tidyverse based on data.table?
主板设计中:网络变压器与RJ45网口之间应该保持什么样的距离?
随机推荐
Pay from 0 to 1
详解虚拟机!京东大佬出品 HotSpot VM 源码剖析笔记(附完整源码)
ES6--residual parameters
XSS线上靶场---Warmups
LitJson报错记录
XSS线上靶场---prompt
XSS练习---一次循环和两次循环问题
XSS线上靶场---haozi
XSS holes emersion
CAS:1192802-98-4_UV 裂解的生物素-PEG2-叠氮
聚焦开源与联合共创|麒麟软件出席开源峰会欧拉分论坛
buildscript和allprojects的作用和区别是什么?
gtk实现图片旋转
Soft exam system analysts note experience sharing: theory of protracted war
Orcad Capture Cadence 新建原理图多部分smybol和Homogeneous、Heterogeneous类型介绍教程
C. Divan and bitwise operations
4. 模块化编程
CAS:908007-17-0_Biotin-azide _生物素叠氮化物
软件测试人员必备的60个测试工具清单,建议收藏一波~
dataframe 多层索引 更换索引 df.swaplevel(axis=1)