掘地三尺搞定Redis与MySQL数据一致性问题(6)
2023-04-24 来源:飞速影视
只有第一个成功,第二个失败才让人头痛,想要保证他们的原子性,就涉及到分布式事务的范畴了。
3.1 先更新缓存,再更新数据库
![掘地三尺搞定Redis与MySQL数据一致性问题](http://fs.qqfile.top/re/aHR0cHM6Ly9waWMucm1iLmJkc3RhdGljLmNvbS9iamgvZG93bi9lMWU3MjZmYzZhMGExMWY4NjZiZmRhNzEzMzk3NzdmNS5qcGVnQHdtXzIsdF81NW0gNWE2MjVZIDNMMGxVVUZWQyxmY19mZmZmZmYsZmZfVTJsdFNHVnAsc3pfMTgseF8xMix5XzEy0)
先更新缓存再更新数据库
如果先更新缓存成功,写数据库失败,就会导致缓存是最新数据,数据库是旧数据,那缓存就是脏数据了。
之后,其他查询立马请求进来的时候就会获取这个数据,而这个数据数据库中却不存在。
数据库都不存在的数据,缓存并返回客户端就毫无意义了。
该方案直接 Pass。
3.2 先更新数据库,再更新缓存
一切正常的情况如下:
先写数据库,成功;再 update 缓存,成功。
更新缓存失败
这时候我们来推断下,假如这两个操作的原子性被破坏:第一步成功,第二步失败会导致什么问题?
会导致数据库是最新数据,缓存是旧数据,出现一致性问题。
该图我就不画了,与上一个图类似,对调下 Redis 和 MySQL 的位置即可。
高并发场景
谢霸歌经常 996,腰酸脖子疼,bug 越写越多,想去按摩推拿放提升下编程技巧。
疫情影响,单子来之不易,高端会所的技师都争先恐后想接这一单,高并发啊兄弟们。
在进店以后,前台会将顾客信息录入系统,执行 set xx的服务技师 = 待定的初始值表示目前无人接待保存到数据库和缓存中,之后再安排技师按摩服务。
如下图所示:
![掘地三尺搞定Redis与MySQL数据一致性问题](/images/loading.gif)
本站仅为学习交流之用,所有视频和图片均来自互联网收集而来,版权归原创者所有,本网站只提供web页面服务,并不提供资源存储,也不参与录制、上传
若本站收录的节目无意侵犯了贵司版权,请发邮件(我们会在3个工作日内删除侵权内容,谢谢。)
www.fs94.org-飞速影视 粤ICP备74369512号