redis與Mysql的數(shù)據(jù)一致性

為了減少db的讀壓力,加快讀速度,系統(tǒng)使用cache做緩存史飞,會(huì)引起cache一致性問題冬竟。因?yàn)閐b會(huì)有事務(wù)性導(dǎo)致回滾,而cache無法回滾杠愧,會(huì)導(dǎo)致臟數(shù)據(jù)。

一般情況下,我們會(huì)在保存數(shù)據(jù)時(shí)纹安,先穿透保存到DB中,再同步數(shù)據(jù)到redis中。

為了保證存儲(chǔ)層對(duì)外層透明厢岂,我們會(huì)把DB與redis操作封裝光督,對(duì)上層調(diào)用來說完全透明,不關(guān)心數(shù)據(jù)具體如何存儲(chǔ)塔粒。

例如在我們的實(shí)際業(yè)務(wù)中有如下場(chǎng)景:A表插入一條數(shù)據(jù)结借,同步到redis中,B表插入一條數(shù)據(jù)卒茬,同步到redis中船老。如果B表插入數(shù)據(jù)失敗,事務(wù)回滾扬虚,A表中數(shù)據(jù)可以回滾努隙,但是redis無法回滾。會(huì)導(dǎo)致redis中有臟數(shù)據(jù)辜昵。

facebook的一篇論文給出如下設(shè)計(jì):

查詢:先查詢cache荸镊,miss時(shí)查詢db,寫入cache

寫:寫db成功后堪置,失效cache

重點(diǎn)說下寫:如果寫db成功后躬存,寫cache,會(huì)有事務(wù)性和并發(fā)性兩方面問題舀锨。

1.事務(wù)性問題:一個(gè)事務(wù)包含多個(gè)db操作岭洲,操作一些db成功,寫cache成功坎匿,操作二寫db失敗盾剩,事務(wù)回滾,db數(shù)據(jù)回滾替蔬,cache無法回滾告私,導(dǎo)致臟數(shù)據(jù)。

2.并發(fā)性問題:兩個(gè)更新操作并發(fā)承桥,如更新名字驻粟,并且cache中key以名字為關(guān)鍵字,更新一寫db成功凶异,寫緩存XXXX_name1成功蜀撑。更新二寫db成功,寫緩存XXXX_name2成功剩彬。導(dǎo)致cache臟數(shù)據(jù)酷麦。

這里再說一下一般更新操作順序是失效cache,寫db喉恋,寫cache贴铜。會(huì)有并發(fā)問題粪摘。

兩個(gè)并發(fā)操作,更新和讀绍坝,左邊寫線程,右邊為讀線程

①更新操作刪除cache

②讀操作讀cache苔悦,miss

③讀db轩褐,此時(shí)是舊數(shù)據(jù)

④寫db,寫cache

⑤寫cache 導(dǎo)致cache中臟數(shù)據(jù)玖详。

雖然寫db成功后把介,失效cache也會(huì)有并發(fā)問題:更新和讀并發(fā)

①查詢cache

②寫db,失效cache

③寫chache

導(dǎo)致cache中臟數(shù)據(jù)蟋座,但是概率極低拗踢,并且一般db中寫時(shí)間長于讀時(shí)間,并且寫會(huì)鎖表向臀,讀需要在寫前進(jìn)入巢墅,并且要晚于寫操作更新緩存,所以發(fā)生概率極低券膀。

解決方法是 2PC或是Paxos協(xié)議君纫,代價(jià)較大。

所以我們采用的方式是:

寫數(shù)據(jù)只寫db

更新數(shù)據(jù)先更新db芹彬,再失效cache

讀數(shù)據(jù)蓄髓,先讀cache,未命中讀db舒帮,寫入cache

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末会喝,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子玩郊,更是在濱河造成了極大的恐慌肢执,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瓦宜,死亡現(xiàn)場(chǎng)離奇詭異蔚万,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)临庇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門反璃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人假夺,你說我怎么就攤上這事淮蜈。” “怎么了已卷?”我有些...
    開封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵梧田,是天一觀的道長。 經(jīng)常有香客問我,道長裁眯,這世上最難降的妖魔是什么鹉梨? 我笑而不...
    開封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮穿稳,結(jié)果婚禮上存皂,老公的妹妹穿的比我還像新娘。我一直安慰自己逢艘,他們只是感情好旦袋,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著它改,像睡著了一般疤孕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上央拖,一...
    開封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天祭阀,我揣著相機(jī)與錄音,去河邊找鬼爬泥。 笑死柬讨,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的袍啡。 我是一名探鬼主播踩官,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼境输!你這毒婦竟也來了蔗牡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤嗅剖,失蹤者是張志新(化名)和其女友劉穎辩越,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體信粮,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡黔攒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了强缘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片督惰。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖旅掂,靈堂內(nèi)的尸體忽然破棺而出赏胚,到底是詐尸還是另有隱情,我是刑警寧澤商虐,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布觉阅,位于F島的核電站崖疤,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏典勇。R本人自食惡果不足惜劫哼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望割笙。 院中可真熱鬧沦偎,春花似錦、人聲如沸咳蔚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谈火。三九已至,卻和暖如春舌涨,著一層夾襖步出監(jiān)牢的瞬間糯耍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工囊嘉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留温技,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓扭粱,卻偏偏與公主長得像舵鳞,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子琢蛤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

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