精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

    文章

    233

    瀏覽量

    26649
  • 數據庫
    +關注

    關注

    7

    文章

    3767

    瀏覽量

    64280
收藏 人收藏

    評論

    相關推薦

    何解數據庫緩存一致

    緩存一致性 每次逢年過節的時候搶票非常艱難,放票的時候那么多人同時去搶票,如果所有人查詢、購票等都去訪問數據庫,那數據庫的壓力得有多大,這時候很多都會引入
    的頭像 發表于 09-25 15:25 ?1060次閱讀
    如<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 ?4423次閱讀

    緩存數據庫一致性問題如何解

    最近不是正好在研究 canal 嘛,剛巧前兩天看了篇關于解決緩存數據庫一致性問題的文章,里邊提到了種解決方案是結合 canal 來操作
    的頭像 發表于 03-24 14:34 ?626次閱讀
    <b class='flag-5'>緩存</b>與<b class='flag-5'>數據庫</b><b class='flag-5'>一致</b>性問題如<b class='flag-5'>何解</b>決

    什么是電芯的不一致性?電芯不一致會造成什么后果?

    什么是電芯的不一致性?電芯不一致會造成什么后果? 電芯是電池組成部分之,由正負極、電解質和隔膜組成。在電動車和移動設備中廣泛使用的鋰離子電池,通常由數十個甚至數百個電芯組成。電芯的不一致
    的頭像 發表于 11-06 10:56 ?3276次閱讀

    什么是鋰離子電池不一致性?如何提高鋰離子電池的一致性?

    什么是鋰離子電池不一致性?鋰離子電池不穩定的原因?如何提高鋰離子電池的一致性? 鋰離子電池不一致性是指同批次或不同批次的鋰離子電池在性能上出現
    的頭像 發表于 11-10 14:49 ?1731次閱讀

    mysql主從復制數據不一致怎么辦

    MySQL主從復制是種常用的數據復制技術,用于實現數據的實時同步和分布式部署。然而,在實際應用中,主從復制過程中出現數據
    的頭像 發表于 11-16 14:35 ?2306次閱讀

    Redis緩存與Mysql如何保證一致性?

    基本流程就是客戶端A請求,先去刪除緩存,然后將數據寫入數據庫,此時客戶端B查詢先去查詢緩存緩存沒有返回,去查
    的頭像 發表于 12-02 14:23 ?895次閱讀
    Redis<b class='flag-5'>緩存</b>與Mysql如何保證<b class='flag-5'>一致</b>性?