0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

缓存与数据库出现不一致的情况如何解决

电子工程师 来源:网络整理 作者:工程师飞燕 2018-07-15 10:24 次阅读

一、数据库主从不一致

先回顾下,无缓存时,数据库主从不一致问题。

缓存与数据库出现不一致的情况如何解决

如上图,发生的场景是,写后立刻读:

主库一个写请求(主从没同步完成)

从库接着一个读请求,读到了旧数据

最后,主从同步完成

导致的结果是:主动同步完成之前,会读取到旧数据。

可以看到,主从不一致的影响时间很短,在主从同步完成后,就会读到新数据。

二、缓存与数据库不一致

再看,引入缓存后,缓存和数据库不一致问题。

如上图,发生的场景也是,写后立刻读:

(1+2)先一个写请求,淘汰缓存,写数据库

(3+4+5)接着立刻一个读请求,读缓存,cache miss,读从库,写缓存放入数据,以便后续的读能够cache hit(主从同步没有完成,缓存中放入了旧数据)

(6)最后,主从同步完成

导致的结果是:旧数据放入缓存,即使主从同步完成,后续仍然会从缓存一直读取到旧数据。

可以看到,加入缓存后,导致的不一致影响时间会很长,并且最终也不会达到一致。

三、问题分析

可以看到,这里提到的缓存与数据库数据不一致,根本上是由数据库主从不一致引起的。当主库上发生写操作之后,从库binlog同步的时间间隔内,读请求,可能导致有旧数据入缓存。

假如主从不一致没法彻底解决,引入缓存之后,binlog同步时间间隔内,也无法避免读旧数据。

但是,有没有办法做到,即使引入缓存,不一致不会比“不引入缓存”更糟呢?这是更为实际的优化目标。

思路转化为:在从库同步完成之后,如果有旧数据入缓存,应该及时把这个旧数据淘汰掉。

四、不一致优化

如上图所述,在并发读写导致缓存中读入了脏数据之后:

(6)主从同步

(7)通过工具订阅从库的binlog,这里能够最准确的知道,从库数据同步完成的时间

画外音:本图画的订阅工具是DTS,可以是cannal,也可以自己订阅和分析binlog

(8)从库执行完写操作,向缓存再次发起删除,淘汰这段时间内可能写入缓存的旧数据

如此这般,至少能够保证,引入缓存之后,主从不一致,不会比没有引入缓存更坏。

画外音:即使引入缓存,也只有一个很小的时间间隔,可能读到旧数据。

五、结尾

问:如何完全避免,主从同步时间差,数据的一致性?

答:详见《数据库主从不一致,怎么解?》。

问:该方案,只能优化,并发读写情况下,缓存与数据库一致性问题。如果,缓存与数据库两次操作,原子性被破坏(例如:修改数据库成功,淘汰缓存失败,导致的数据不一致),如何优化数据的一致性呢?

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 缓存
    +关注

    关注

    1

    文章

    240

    浏览量

    26699
  • 数据库
    +关注

    关注

    7

    文章

    3822

    浏览量

    64506
收藏 人收藏

    评论

    相关推荐

    何解数据库缓存一致

    缓存一致性 每次逢年过节的时候抢票非常艰难,放票的时候那么多人同时去抢票,如果所有人查询、购票等都去访问数据库,那数据库的压力得有多大,这时候很多都会引入
    的头像 发表于 09-25 15:25 1126次阅读
    如<b class='flag-5'>何解</b>决<b class='flag-5'>数据库</b>与<b class='flag-5'>缓存</b><b class='flag-5'>一致</b>性

    MAX直显示IP不一致怎么解决

    请问各位大神,这种IP地址不一致何解决?我已经按照MAX上面显示的IP地址修改了,还是出现IP地址不一致情况
    发表于 09-04 09:55

    labview和agilent4294数据不一致问题

    我利用GPIB,让labview程序和agilent4294建立通信后。进行了单次采集,并在程序中加入读取4294数据作图部分。但是发现labview界面的作图结果与4294显示屏上的结果不一致。存在个类似于读取的时间延迟问题
    发表于 09-11 15:23

    何解决STM32发送的数据与串口助手上面显示数据不一致的问题?

    何解决STM32发送的数据与串口助手上面显示数据不一致的问题?
    发表于 12-09 06:59

    基于偏好不一致熵的偏好决策方法

    针对多规则有序决策系统中的偏好决策问题,根据有序决策的偏好不一致特性,提出了种基于偏好不一致熵的偏好决策方法。首先,定义了样本的偏好不一致熵( PIEO),用来度量特定样本相对于样本
    发表于 12-05 11:50 0次下载

    不一致数据上精确决策树生成算法

    近年来,随着现实生活中数据量的不断增大,不一致数据出现也越发频繁,这使得人工修正不一致数据变得
    发表于 12-26 16:13 0次下载
    <b class='flag-5'>不一致</b><b class='flag-5'>数据</b>上精确决策树生成算法

    感兴趣区域不一致性决策算法

    医学影像感兴趣区域( ROI)的噪声和疾病误判是个典型的不一致性决策问题,同时也是困扰临床诊断的个难题。针对这个问题,基于宏观与微观结合、全局与局部相结合的思想,提出了基于一致度、
    发表于 01-02 18:43 0次下载

    分布式大数据不一致性检测

    关系数据库中可能存在数据不一致性现象,关系数据库数据质量的个主要问题是存在违反函数依赖
    发表于 01-12 16:29 0次下载

    锂电池组不一致性的原因及危害是怎样的

    锂电池组不一致性的原因及损害,看了就明白!锂电池组电压不一致会发生什么损害?怎么应对锂电池组不一致性的损害?锂电池参数的不一致首要是指容量、内阻、开路电压的
    发表于 03-17 17:39 1.2w次阅读

    锂电池组不一致性的原因是什么,它的危害有哪些

    锂电池组不一致性的原因及损害,看了就明白!锂电池组电压不一致会发生什么损害?怎么应对锂电池组不一致性的损害?锂电池参数的不一致首要是指容量、内阻、开路电压的
    发表于 03-17 17:41 4535次阅读

    缓存数据库一致性问题如何解

    最近不是正好在研究 canal 嘛,刚巧前两天看了篇关于解决缓存数据库一致性问题的文章,里边提到了种解决方案是结合 canal 来操作
    的头像 发表于 03-24 14:34 664次阅读
    <b class='flag-5'>缓存</b>与<b class='flag-5'>数据库</b><b class='flag-5'>一致</b>性问题如<b class='flag-5'>何解</b>决

    什么是电芯的不一致性?电芯不一致会造成什么后果?

    什么是电芯的不一致性?电芯不一致会造成什么后果? 电芯是电池组成部分之,由正负极、电解质和隔膜组成。在电动车和移动设备中广泛使用的锂离子电池,通常由数十个甚至数百个电芯组成。电芯的不一致
    的头像 发表于 11-06 10:56 3551次阅读

    mysql主从复制数据不一致怎么办

    MySQL主从复制是种常用的数据复制技术,用于实现数据的实时同步和分布式部署。然而,在实际应用中,主从复制过程中出现数据
    的头像 发表于 11-16 14:35 2419次阅读

    Redis缓存与Mysql如何保证一致性?

    基本流程就是客户端A请求,先去删除缓存,然后将数据写入数据库,此时客户端B查询先去查询缓存缓存没有返回,去查
    的头像 发表于 12-02 14:23 941次阅读
    Redis<b class='flag-5'>缓存</b>与Mysql如何保证<b class='flag-5'>一致</b>性?

    Sybase数据恢复—Sybase数据库无法启动怎么恢复数据

    数据库数据恢复工程师经过检测,发现Sybase数据库出现故障的原因是:异常断电造成Sybase数据库无法回写正常
    的头像 发表于 11-30 16:45 143次阅读
    Sybase<b class='flag-5'>数据</b>恢复—Sybase<b class='flag-5'>数据库</b>无法启动怎么恢复<b class='flag-5'>数据</b>?