数据库和缓存数据如何保障划一性(四种方案)

打印 上一主题 下一主题

主题 1369|帖子 1369|积分 4107

方案一:同步删除

核心流程:


  • 首先更新数据库数据
  • 然后删除缓存数据

存在问题:


  • 存在部门成功:更新数据库及删除缓存非原子利用,缓存删除失败会存在脏数据
  • 难以收拢所有数据库更新入口:入口如更新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 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

光之使者

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表