论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
数据库
›
分布式数据库
›
数据库和缓存数据如何保障划一性(四种方案) ...
数据库和缓存数据如何保障划一性(四种方案)
光之使者
论坛元老
|
2025-3-31 11:44:06
|
显示全部楼层
|
阅读模式
楼主
主题
1383
|
帖子
1383
|
积分
4149
方案一:同步删除
核心流程:
首先更新数据库数据
然后删除缓存数据
存在问题:
存在部门成功:更新数据库及删除缓存非原子利用,缓存删除失败会存在脏数据
难以收拢所有数据库更新入口:入口如更新API接口,数据库管理平台,直接命令行利用等
并发场景下存在问题
竞态条件:
在多个线程或历程同时访问和删除缓存数据时,大概会出现竞态条件。例如,当多个线程同时检查缓存中的数据是否存在,并且都发现需要进行删除利用时,就会导致多个线程同时执行删除利用,大概出现数据差别等的环境。
脏读问题:
在删除缓存数据时,如果其他线程在删除利用完成之前读取到了已经被删除的数据,就会导致脏读问题。这大概会导致数据的错误利用或显示。
写回问题:
在缓存同步删除的过程中,由于并发访问的存在,大概会发生写回问题。即,在数据删除利用执行完成之前,其他线程或历程又将该数据写入了缓存。如许,纵然原本应该被删除的数据被重新写入缓存,导致删除利用被无效化。
并发回写场景示例:
线程1线程2查询数据库数据:a=1更新数据库:a=2删除缓存数据将数据写入缓存:a=1 小结:由于存在更新入口难以收拢,并发脏数据等问题,此方案一样平常不会单独利用,可作为增补
方案二:延迟双删
核心流程:
删除缓存数据
更新数据库数据
等候一小段时间
再次删除缓存数据
存在的问题:
延迟时间不好确定
时间太短,大概达不到删除脏缓存的结果,时间长的话,这个中心产生脏数据的大概就会变大
无法绝对保障数据的划一性
线程1线程2线程3删除缓存数据更新主库:a=2再次删除缓存查询从数据库:a=1将数据写入缓存:a=1(脏)数据同步从库:a=2 此例中,由于数据库主从同步完成之间,存在并发哀求,从而导致脏数据,脏数据还大概连续好久。
同时,当主库写压力过大时,主从之间的同步延迟大概是分钟级的。
因此,方案存在明显问题,一样平常也不会直接利用
小结:由于延迟时间不好确定,同时无法绝对保障数据的划一性,该方案一样平常也不会利用
方案三:异步监听binglog删除+重试
核心流程:
更新数据库
监听binlog删除缓存
缓存删除失败则通过MQ不停重试,直到删除成功
存在问题:
整体执行链路相比同步删除变的更长,脏数据产生的窗口时间拉大
增加了对其他组件的依赖,结实性相比同步删除变的更差一点
小结:大多数场景下利用没有问题,业务较小的场景比较合适,或可以按需进行继承改造
三种方案综合评价
方案问题长处方案一:同步删除1. 删除缓存失败存在脏数据
2. 难以收拢所有更新数据库数据入口
3. 并发场景下脏数据问题实现简单方案二:延迟双删1.延迟时间不好确定
2.无法绝对保障数据的划一性相比同步删除进一步减少了脏数据的大概方案三:异步监听binglog删除+重试1. 整体执行链路相比同步删除变的更长,脏数据产生的窗口时间拉大。
2. 增加了对其他组件的依赖,结实性相比同步删除变的更差一点问题不明显,适合大多数业务场景
终极方案
核心流程:
1. 删除数据库同步删除缓存:
缩小大概发生脏数据的时间窗
2. Binlog + MQ删除缓存:
兜底所有入口,制止遗漏删除缓存场景,同时通过MQ的消息重试包管缓存一定删除成功
3. 监听Binlog延迟N秒进行数据划一性校验:
每个更新利用后延迟校验数据库与缓存的划一性,异常则修复,办理极度场景下的脏数据问题
4. 逾期删除缓存:
刚更新过的缓存存在差别等性的概率相对会大很多,因此可以在更新场景下设置更小的逾期时间
5. 存在数据库更新的链路禁用缓存:
由于数据库更新后,立刻查询缓存,缓存大概还没来的及更新,此时可直接查询数据库降低读脏数据风险
6. 【集群问题】强制读Redis主节点:
更新Redis后,立刻读取,如果读的是从节点,大概数据不是最新的,此时可强制读主节点降低读脏数据风险
7. 【监控分析】查询异步数据划一性校验:
查询完数据库之后,通过线程池再异步的查一次缓存,将数据库数据和缓存数据做比较,结果进行打点统计,如果概率超1%说明流程还不可靠,需分析差别等性数据,分析原因,继承优化。如果概率小于0.01%,证明流量基本可靠。
8. 【灰度放量】新方案试点后再渐渐放开:
没有颠末线上验证的方案,不要全切,让风险可控,渐渐放开
设计流程图:
总结:高并发场景下缓存与数据库数据的划一性问题,终极还是要看现实项目运行环境,以选择差别方案,并连续优化,每种方案都有本身的考量
本篇文章参考:https://blog.csdn.net/v123411739/article/details/124237900
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
光之使者
论坛元老
这个人很懒什么都没写!
楼主热帖
〖Python接口自动化测试实战篇⑥〗- 接 ...
100 行代码搞定了 RPC 原理,大家随便 ...
HarmonyOS之分布式软总线
Python3,2行代码,多种方法,直接把网 ...
Python每日一练——第5天:闰年问题升 ...
PyTorch nn.RNN 参数全解析
快速上手kettle(三)壶中可以放些啥? ...
【Linux篇】第十八篇——网络套接字编 ...
KeePass敏感信息明文传输漏洞复现 (CV ...
[SWPUCTF 2021 新生赛]PseudoProtocols ...
标签云
集成商
AI
运维
CIO
存储
服务器
浏览过的版块
容器及微服务
登录参与点评抽奖加入IT实名职场社区
下次自动登录
忘记密码?点此找回!
登陆
新用户注册
用其它账号登录:
关闭
快速回复
返回顶部
返回列表