2023-04-07 關(guān)于數(shù)據(jù)庫(kù)和緩存的一致性

今天回顧數(shù)據(jù)庫(kù)和緩存的一致性的場(chǎng)景有所感悟,因此有記:

不管是先刪除緩存再寫(xiě)入數(shù)據(jù)庫(kù)琼牧,還是先寫(xiě)入數(shù)據(jù)庫(kù)再刪除緩存砚哆,都有可能出現(xiàn)不一致的情況:

(1)先刪除緩存再寫(xiě)入數(shù)據(jù)庫(kù)

數(shù)據(jù)庫(kù)X = 1

線程A修改X=2:1、刪除了緩存厘灼,????????????????????????????????????????????????????????????????????????????????????????????????????3忿等、寫(xiě)入X=2

線程B查詢:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2栖忠、? 發(fā)現(xiàn)緩存無(wú)數(shù)據(jù),于是從數(shù)據(jù)庫(kù)查詢贸街,X=1庵寞,寫(xiě)入緩存

最終結(jié)果:緩存X=1,數(shù)據(jù)庫(kù)X=2

(2)先寫(xiě)入數(shù)據(jù)庫(kù)再刪除緩存

數(shù)據(jù)庫(kù)X = 1

線程A查詢:? ? 1薛匪、?發(fā)現(xiàn)緩存無(wú)數(shù)據(jù)捐川,于是從數(shù)據(jù)庫(kù)查詢,X=1逸尖,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????????????3古沥、寫(xiě)入緩存

線程B修改X=2:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2、更新數(shù)據(jù)庫(kù)X=2娇跟,刪除緩存

最終結(jié)果:緩存X=1岩齿,數(shù)據(jù)庫(kù)X=2

當(dāng)然(2)先寫(xiě)入數(shù)據(jù)庫(kù)再刪除緩存這個(gè)出現(xiàn)不一致的概率很低,因?yàn)橐鼻『谩暗挠凶x寫(xiě)并發(fā)苞俘,而且讀的線程比寫(xiě)的線程還慢盹沈,寫(xiě)線程本身就要加鎖。對(duì)比起來(lái)(1)先刪除緩存再寫(xiě)入數(shù)據(jù)吃谣,只要有讀寫(xiě)并發(fā)就很容易出現(xiàn)數(shù)據(jù)不一致的問(wèn)題乞封,已經(jīng)算是一個(gè)很好的解決方案。

但是還要考慮一個(gè)問(wèn)題岗憋,使用(2)的話肃晚,就是期間可能發(fā)生一些事故導(dǎo)致寫(xiě)入數(shù)據(jù)庫(kù)之后服務(wù)器無(wú)法正常執(zhí)行下去,重啟后會(huì)存在數(shù)據(jù)庫(kù)是2但是緩存還是1的問(wèn)題澜驮,但是如果是用(1)的話陷揪,先刪除緩存之后異常惋鸥,那么恢復(fù)之后的話緩存還是會(huì)去讀數(shù)據(jù)庫(kù)的1杂穷,好歹還是一致的,但是這導(dǎo)致了結(jié)果是舊值卦绣。這就是剩余的第二步執(zhí)行失敗的問(wèn)題了耐量。

所以在得出使用(1)是更好的方式的前提下,如何在(1)的第二步:刪除緩存 下功夫滤港?

1廊蜒、重試趴拧,使用第三方重試,這已經(jīng)算是比較受大家接受的方案了山叮,比如使用MQ刪除著榴。使用MQ不僅僅異步,還節(jié)省了工作線程的時(shí)間屁倔,畢竟重試多少次脑又?多久?總不能卡在這吧

2锐借、使用如canal等工具直接從數(shù)據(jù)庫(kù)问麸,如mysql中直接拉取對(duì)應(yīng)的binlog,根據(jù)這個(gè)binlog再對(duì)緩存進(jìn)行刪除

所以現(xiàn)在總結(jié)下來(lái)比較能讓人接受的總體方案大概為:

先寫(xiě)入數(shù)據(jù)庫(kù)钞翔,再刪除緩存

(一)(第二步的刪除緩存可以做優(yōu)化严卖,1、MQ執(zhí)行刪除 2布轿、canal讀取數(shù)據(jù)庫(kù)binlog再交給MQ執(zhí)行刪除)


其次還有主從延遲問(wèn)題

數(shù)據(jù)庫(kù)X=1

線程A執(zhí)行X=2:1哮笆、X=2寫(xiě)入數(shù)據(jù)庫(kù),刪除緩存? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3汰扭、同步至從庫(kù)中

線程B查詢:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????2疟呐、查詢緩存為空,從庫(kù)中查詢到X=1东且,寫(xiě)入緩存

最終結(jié)果:緩存X=1启具,數(shù)據(jù)庫(kù)X=2

這個(gè)問(wèn)題其實(shí)解決方式和(一)一樣,都是執(zhí)行緩存刪除就能解決這個(gè)問(wèn)題珊泳,往后延遲刪除就肯定解決這個(gè)問(wèn)題

但是問(wèn)題就是鲁冯,不知道延遲多少才好,很難評(píng)估色查,這個(gè)需要參考生產(chǎn)環(huán)境才能做到的效果

先暫停一下薯演,回到我們的一致性問(wèn)題,那么我們現(xiàn)在做到這個(gè)步驟了秧了,發(fā)現(xiàn)了沒(méi)跨扮,其實(shí)我們的效果都是達(dá)到的是最終一致性

因?yàn)槲覀兊姆?wù)器一直在運(yùn)行,線程一直在工作验毡,有沒(méi)有必要做到強(qiáng)一致性呢衡创?只要查詢的時(shí)候就把所有修改操作都阻塞掉?不合理吧晶通。

但是還是有強(qiáng)一致性的方案如2pc璃氢,3pc等一致性協(xié)議。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末狮辽,一起剝皮案震驚了整個(gè)濱河市一也,隨后出現(xiàn)的幾起案子巢寡,更是在濱河造成了極大的恐慌,老刑警劉巖椰苟,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抑月,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡舆蝴,警方通過(guò)查閱死者的電腦和手機(jī)爪幻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)须误,“玉大人挨稿,你說(shuō)我怎么就攤上這事【┝。” “怎么了奶甘?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)祭椰。 經(jīng)常有香客問(wèn)我臭家,道長(zhǎng),這世上最難降的妖魔是什么方淤? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任钉赁,我火速辦了婚禮,結(jié)果婚禮上携茂,老公的妹妹穿的比我還像新娘你踩。我一直安慰自己,他們只是感情好讳苦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布带膜。 她就那樣靜靜地躺著,像睡著了一般鸳谜。 火紅的嫁衣襯著肌膚如雪膝藕。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,482評(píng)論 1 302
  • 那天咐扭,我揣著相機(jī)與錄音芭挽,去河邊找鬼。 笑死蝗肪,一個(gè)胖子當(dāng)著我的面吹牛袜爪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播穗慕,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼饿敲,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了逛绵?” 一聲冷哼從身側(cè)響起怀各,我...
    開(kāi)封第一講書(shū)人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎术浪,沒(méi)想到半個(gè)月后瓢对,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡胰苏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年硕蛹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片硕并。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡法焰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出倔毙,到底是詐尸還是另有隱情埃仪,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布陕赃,位于F島的核電站卵蛉,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏么库。R本人自食惡果不足惜傻丝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望诉儒。 院中可真熱鬧葡缰,春花似錦、人聲如沸忱反。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)缭受。三九已至胁澳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間米者,已是汗流浹背韭畸。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蔓搞,地道東北人胰丁。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像喂分,于是被迫代替她去往敵國(guó)和親锦庸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容