当前位置:网站首页>数据一致性:双删为什么要延时?
数据一致性:双删为什么要延时?
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数据的一致性
边栏推荐
猜你喜欢
剑指 Offer 16. 数值的整数次方
AI首席架构师13-AICA-智能文档分析技术在行业场景中的应用
函数,递归以及dom简单操作
ValidationError: Progress Plugin Invalid Options
IO thread process -> thread synchronization mutual exclusion mechanism -> day6
如何使用 Jmeter获取登录token并设置为全局变量?
测试2年6.5K,每天“911”,我的心酸经历只有我自己知道···
Several difficult problems in DDD
XSS线上靶场---prompt
编译器工程师眼中的好代码(1):Loop Interchange
随机推荐
A. Color the Picture- Codeforces Round #810 (Div. 1)
StoneDB 助力 2022 开放原子全球开源峰会
CAS:122567-66-2_DSPE-Biotin_DSPE-Biotin
详解虚拟机!京东大佬出品 HotSpot VM 源码剖析笔记(附完整源码)
6. XML
376. Wiggle Subsequence
FVCOM三维水动力、水交换、溢油物质扩散及输运数值模拟丨FVCOM模型流域、海洋水环境数值模拟方法
电商数仓ODS层-----日志数据装载
XSS线上靶场---haozi
CAS: 773888-45-2_BIOTIN ALKYNE_生物素-炔基
C. Divan and bitwise operations
线程池的高级应用技巧核心解读
idea2021配置svn报错Cannot run program “svn“ (in directory “xxx“):CreateProcess error=2,系统找不到指定的文件
CAS: 1192802-98-4 _uv cracking of biotin - PEG2 - azide
手动输入班级人数及成绩求总成绩和平均成绩?
IO线程进程->线程同步互斥机制->day6
距LiveVideoStackCon 2022 上海站开幕还有3天!
【Odoo】硬核组件开发,全文没一句废话~
4. Modular programming
超级实用网站+公众号合集