緩存數(shù)據(jù)庫更新策略

Cache Aside Pattern(旁路緩存模式)
對于讀請求
先讀cache朗鸠,再讀db
如果,cache hit却邓,則直接返回數(shù)據(jù)
如果毕荐,cache miss,則訪問db冕碟,并將數(shù)據(jù)set回緩存

對于寫請求
淘汰緩存拦惋,而不是更新緩存
先操作數(shù)據(jù)庫,再淘汰緩存

Cache Aside Pattern為什么建議淘汰緩存安寺,而不是更新緩存厕妖?
答:如果更新緩存,在并發(fā)寫時挑庶,可能出現(xiàn)數(shù)據(jù)不一致言秸。

如果采用set緩存。

在1和2兩個并發(fā)寫發(fā)生時迎捺,由于無法保證時序举畸,此時不管先操作緩存還是先操作數(shù)據(jù)庫,都可能出現(xiàn):
(1)請求1先操作數(shù)據(jù)庫凳枝,請求2后操作數(shù)據(jù)庫
(2)請求2先set了緩存抄沮,請求1后set了緩存
導致,數(shù)據(jù)庫與緩存之間的數(shù)據(jù)不一致岖瑰。

所以叛买,Cache Aside Pattern建議,delete緩存蹋订,而不是set緩存率挣。

Cache Aside Pattern為什么建議先操作數(shù)據(jù)庫,再操作緩存露戒?
答:如果先操作緩存椒功,在讀寫并發(fā)時,可能出現(xiàn)數(shù)據(jù)不一致智什。

架構師之路原文是:
如果先操作緩存动漾。
在1和2并發(fā)讀寫發(fā)生時,由于無法保證時序撩鹿,可能出現(xiàn):
(1)寫請求淘汰了緩存
(2)寫請求操作了數(shù)據(jù)庫(主從同步?jīng)]有完成)
(3)讀請求讀了緩存(cache miss)
(4)讀請求讀了從庫(讀了一個舊數(shù)據(jù))
(5)讀請求set回緩存(set了一個舊數(shù)據(jù))
(6)數(shù)據(jù)庫主從同步完成
導致谦炬,數(shù)據(jù)庫與緩存的數(shù)據(jù)不一致。

其實我認為就算沒有主從同步這個問題节沦,只有一臺數(shù)據(jù)庫键思,也會出現(xiàn)數(shù)據(jù)不一致的情況:
(1)寫請求淘汰了緩存
(2)此時進來一個讀請求,將舊的數(shù)據(jù)set進緩存
(3)寫請求操作了數(shù)據(jù)庫
這種情況的概率是很大的甫贯,因為大多數(shù)情況下的都是讀多寫少的場景吼鳞。

所以,Cache Aside Pattern建議叫搁,先操作數(shù)據(jù)庫赔桌,再操作緩存。

Cache Aside Pattern方案存在什么問題渴逻?
從并發(fā)角度
比如疾党,一個是讀操作,但是沒有命中緩存(緩存剛好到期)惨奕,就會到數(shù)據(jù)庫中取數(shù)據(jù)雪位。而此時來了一個寫操作,寫完數(shù)據(jù)庫后梨撞,讓緩存失效雹洗,然后之前的那個讀操作再把老的數(shù)據(jù)放進去,所以會造成臟數(shù)據(jù)卧波。
這個案例理論上會出現(xiàn)时肿,但實際上出現(xiàn)的概率可能非常低,因為這個條件需要發(fā)生在讀緩存時緩 存失效港粱,而且有一個并發(fā)的寫操作螃成。實際上數(shù)據(jù)庫的寫操作會比讀操作慢得多,而且還要鎖表查坪, 而讀操作必需在寫操作前進入數(shù)據(jù)庫操作锈颗,又要晚于寫操作更新緩存,所有這些條件都具備的概率并不大咪惠。

所以不能完全避免并發(fā)導致的數(shù)據(jù)不一致問題击吱,只能從概率上保證。

分布式事務角度
如果先操作數(shù)據(jù)庫遥昧,再淘汰緩存覆醇,在原子性被破壞時:
(1)修改數(shù)據(jù)庫成功了
(2)淘汰緩存失敗了
導致,數(shù)據(jù)庫與緩存的數(shù)據(jù)不一致炭臭。

但是
Cache Aside Pattern操作緩存失敗永脓,可以通過重試加打日志發(fā)現(xiàn)補救,也可以通過canal或者databus走kafka來失效緩存鞋仍,基本能解決調(diào)緩存失敗的情況常摧。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子落午,更是在濱河造成了極大的恐慌谎懦,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件溃斋,死亡現(xiàn)場離奇詭異界拦,居然都是意外死亡,警方通過查閱死者的電腦和手機梗劫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門享甸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人梳侨,你說我怎么就攤上這事蛉威。” “怎么了走哺?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵蚯嫌,是天一觀的道長。 經(jīng)常有香客問我割坠,道長齐帚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任彼哼,我火速辦了婚禮对妄,結果婚禮上,老公的妹妹穿的比我還像新娘敢朱。我一直安慰自己剪菱,他們只是感情好,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布拴签。 她就那樣靜靜地躺著孝常,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蚓哩。 梳的紋絲不亂的頭發(fā)上构灸,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機與錄音岸梨,去河邊找鬼喜颁。 笑死,一個胖子當著我的面吹牛曹阔,可吹牛的內(nèi)容都是我干的半开。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼赃份,長吁一口氣:“原來是場噩夢啊……” “哼寂拆!你這毒婦竟也來了奢米?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤纠永,失蹤者是張志新(化名)和其女友劉穎鬓长,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體渺蒿,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡痢士,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年彪薛,在試婚紗的時候發(fā)現(xiàn)自己被綠了茂装。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡善延,死狀恐怖少态,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情易遣,我是刑警寧澤彼妻,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站豆茫,受9級特大地震影響侨歉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜揩魂,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一幽邓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧火脉,春花似錦牵舵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至方援,卻和暖如春没炒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背犯戏。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工送火, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人笛丙。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓漾脂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親胚鸯。 傳聞我的和親對象是個殘疾皇子骨稿,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

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

  • PS:轉(zhuǎn)載自《架構師之路》,覺得受益匪淺辙浑,故收錄之 緩存誤用 緩存激涤,是互聯(lián)網(wǎng)分層架構中,非常重要的一個部分判呕,通常用...
    Huang遠閱讀 11,203評論 4 27
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理倦踢,服務發(fā)現(xiàn),斷路器侠草,智...
    卡卡羅2017閱讀 134,629評論 18 139
  • 理論總結 它要解決什么樣的問題辱挥? 數(shù)據(jù)的訪問、存取边涕、計算太慢晤碘、太不穩(wěn)定、太消耗資源功蜓,同時园爷,這樣的操作存在重復性。因...
    jiangmo閱讀 2,842評論 0 11
  • 關于Mongodb的全面總結 MongoDB的內(nèi)部構造《MongoDB The Definitive Guide》...
    中v中閱讀 31,905評論 2 89
  • 哈哈哈式撼,昨晚看了這: 001童社、那些狗血的劇情真不適合太感性的人看,看了以為是真的端衰。 002叠洗、真心愛,坦白溝通呀旅东,折...
    小蘇Amy閱讀 141評論 0 1