掘地三尺搞定Redis与MySQL数据一致性问题

2023-04-24 来源:飞速影视
在本文正式开始之前,我觉得我们需要先取得以下两点的共识:
缓存必须要有过期时间;保证数据库跟缓存的最终一致性即可,不必追求强一致性。
目录如下:
1. 什么是数据库与缓存一致性
2. 缓存的使用策略
2.1 Cache-Aside (旁路缓存)
2.2 Read-Through(直读)
2.3 Write-Through 同步直写
2.4 Write-Behind
3. 旁路缓存下的一致性问题分析
3.1 先更新缓存,再更新数据库
3.2 先更新数据库,再更新缓存
3.3 先删缓存,再更新数据库
3.4 先更新数据库,再删缓存
4. 一致性解决方案有哪些?
4.1 缓存延时双删
4.2 删除缓存重试机制
4.3 读取 binlog 异步删除
总结

1. 什么是数据库与缓存一致性


数据一致性指的是:
缓存中存有数据,缓存的数据值 = 数据库中的值;缓存中没有该数据,数据库中的值 = 最新值。
反推缓存与数据库不一致:
缓存的数据值 ≠ 数据库中的值;缓存或者数据库存在旧的数据,导致线程读取到旧数据。
为何会出现数据一致性问题呢?
把 Redis 作为缓存的时候,当数据发生改变我们需要双写来保证缓存与数据库的数据一致。
数据库跟缓存,毕竟是两套系统,如果要保证强一致性,势必要引入 2PC 或 Paxos 等分布式一致性协议,或者分布式锁等等,这个在实现上是有难度的,而且一定会对性能有影响。
如果真的对数据的一致性要求这么高,那引入缓存是否真的有必要呢?

2. 缓存的使用策略


在使用缓存时,通常有以下几种缓存使用策略用于提升系统性能:
Cache-Aside Pattern(旁路缓存,业务系统常用)Read-Through PatternWrite-Through PatternWrite-Behind Pattern

2.1 Cache-Aside (旁路缓存)


所谓「旁路缓存」,就是读取缓存、读取数据库和更新缓存的操作都在应用系统来完成,业务系统最常用的缓存策略。
相关影视
合作伙伴
本站仅为学习交流之用,所有视频和图片均来自互联网收集而来,版权归原创者所有,本网站只提供web页面服务,并不提供资源存储,也不参与录制、上传
若本站收录的节目无意侵犯了贵司版权,请发邮件(我们会在3个工作日内删除侵权内容,谢谢。)

www.fs94.org-飞速影视 粤ICP备74369512号