日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
緩存與數(shù)據(jù)庫(kù)不一致,咋辦?

緩存與數(shù)據(jù)庫(kù)的操作時(shí)序,不管是《Cache Aside Pattern》中的方案,還是《究竟先操作緩存,還是數(shù)據(jù)庫(kù)?》中的方案,都會(huì)遇到緩存與數(shù)據(jù)庫(kù)不一致的問題。今天聊聊這個(gè)問題。

一、數(shù)據(jù)庫(kù)主從不一致

先回顧下,無緩存時(shí),數(shù)據(jù)庫(kù)主從不一致問題。

如上圖,發(fā)生的場(chǎng)景是,寫后立刻讀:

  • 主庫(kù)一個(gè)寫請(qǐng)求(主從沒同步完成)
  • 從庫(kù)接著一個(gè)讀請(qǐng)求,讀到了舊數(shù)據(jù)
  • ***,主從同步完成

導(dǎo)致的結(jié)果是:主動(dòng)同步完成之前,會(huì)讀取到舊數(shù)據(jù)。

可以看到,主從不一致的影響時(shí)間很短,在主從同步完成后,就會(huì)讀到新數(shù)據(jù)。

二、緩存與數(shù)據(jù)庫(kù)不一致

再看,引入緩存后,緩存和數(shù)據(jù)庫(kù)不一致問題。

如上圖,發(fā)生的場(chǎng)景也是,寫后立刻讀:

  • (1+2)先一個(gè)寫請(qǐng)求,淘汰緩存,寫數(shù)據(jù)庫(kù)
  • (3+4+5)接著立刻一個(gè)讀請(qǐng)求,讀緩存,cache miss,讀從庫(kù),寫緩存放入數(shù)據(jù),以便后續(xù)的讀能夠cache hit(主從同步?jīng)]有完成,緩存中放入了舊數(shù)據(jù))
  • (6)***,主從同步完成

導(dǎo)致的結(jié)果是:舊數(shù)據(jù)放入緩存,即使主從同步完成,后續(xù)仍然會(huì)從緩存一直讀取到舊數(shù)據(jù)。

可以看到,加入緩存后,導(dǎo)致的不一致影響時(shí)間會(huì)很長(zhǎng),并且最終也不會(huì)達(dá)到一致。

三、問題分析

可以看到,這里提到的緩存與數(shù)據(jù)庫(kù)數(shù)據(jù)不一致,根本上是由數(shù)據(jù)庫(kù)主從不一致引起的。當(dāng)主庫(kù)上發(fā)生寫操作之后,從庫(kù)binlog同步的時(shí)間間隔內(nèi),讀請(qǐng)求,可能導(dǎo)致有舊數(shù)據(jù)入緩存。

假如主從不一致沒法徹底解決,引入緩存之后,binlog同步時(shí)間間隔內(nèi),也無法避免讀舊數(shù)據(jù)。

但是,有沒有辦法做到,即使引入緩存,不一致不會(huì)比“不引入緩存”更糟呢?這是更為實(shí)際的優(yōu)化目標(biāo)。

思路轉(zhuǎn)化為:在從庫(kù)同步完成之后,如果有舊數(shù)據(jù)入緩存,應(yīng)該及時(shí)把這個(gè)舊數(shù)據(jù)淘汰掉。

四、不一致優(yōu)化

如上圖所述,在并發(fā)讀寫導(dǎo)致緩存中讀入了臟數(shù)據(jù)之后:

  • (6)主從同步
  • (7)通過工具訂閱從庫(kù)的binlog,這里能夠最準(zhǔn)確的知道,從庫(kù)數(shù)據(jù)同步完成的時(shí)間

畫外音:本圖畫的訂閱工具是DTS,可以是cannal,也可以自己訂閱和分析binlog

  • (8)從庫(kù)執(zhí)行完寫操作,向緩存再次發(fā)起刪除,淘汰這段時(shí)間內(nèi)可能寫入緩存的舊數(shù)據(jù)

如此這般,至少能夠保證,引入緩存之后,主從不一致,不會(huì)比沒有引入緩存更壞。

畫外音:即使引入緩存,也只有一個(gè)很小的時(shí)間間隔,可能讀到舊數(shù)據(jù)。

五、結(jié)尾

問:如何完全避免,主從同步時(shí)間差,數(shù)據(jù)的一致性?

答:詳見《數(shù)據(jù)庫(kù)主從不一致,怎么解?》。

問:該方案,只能優(yōu)化,并發(fā)讀寫情況下,緩存與數(shù)據(jù)庫(kù)一致性問題。如果,緩存與數(shù)據(jù)庫(kù)兩次操作,原子性被破壞(例如:修改數(shù)據(jù)庫(kù)成功,淘汰緩存失敗,導(dǎo)致的數(shù)據(jù)不一致),如何優(yōu)化數(shù)據(jù)的一致性呢?

答:詳見《究竟先操作緩存,還是數(shù)據(jù)庫(kù)?》。

【本文為專欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)聯(lián)系原作者】


網(wǎng)站名稱:緩存與數(shù)據(jù)庫(kù)不一致,咋辦?
轉(zhuǎn)載注明:http://www.5511xx.com/article/dphdesc.html