国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Redis---數(shù)據(jù)庫和緩存如何保證一致性?

這篇具有很好參考價值的文章主要介紹了Redis---數(shù)據(jù)庫和緩存如何保證一致性?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

先更新數(shù)據(jù)庫,再刪除緩存

用「讀 + 寫」請求的并發(fā)的場景來分析:
假如某個用戶數(shù)據(jù)在緩存中不存在,請求 A 讀取數(shù)據(jù)時從數(shù)據(jù)庫中查詢到年齡為 20,在未寫入緩存中時另一個請求 B 更新數(shù)據(jù)。它更新數(shù)據(jù)庫中的年齡為 21,并且清空緩存。這時請求 A 把從數(shù)據(jù)庫中讀到的年齡為 20 的數(shù)據(jù)寫入到緩存中。

從上面的理論上分析,先更新數(shù)據(jù)庫,再刪除緩存也是會出現(xiàn)數(shù)據(jù)不一致性的問題,但是在實際中,這個問題出現(xiàn)的概率并不高

因為緩存的寫入通常要遠(yuǎn)遠(yuǎn)快于數(shù)據(jù)庫的寫入

給緩存數(shù)據(jù)加上了「過期時間」,就算在這期間存在緩存數(shù)據(jù)不一致,有過期時間來兜底,這樣也能達(dá)到最終一致

出現(xiàn)的問題:在刪除緩存(第二個操作)的時候失敗了,導(dǎo)致緩存中的數(shù)據(jù)是舊值,而數(shù)據(jù)庫是最新值,導(dǎo)致出現(xiàn)過一段時間才更新生效的現(xiàn)象

如何保證兩個操作都能執(zhí)行成功?

重試機制

用異步操作緩存。

我們可以引入消息隊列,將第二個操作(刪除緩存)要操作的數(shù)據(jù)加入到消息隊列,由消費者來操作數(shù)據(jù)。

如果應(yīng)用刪除緩存失敗,可以從消息隊列中重新讀取數(shù)據(jù),然后再次刪除緩存,這個就是重試機制。當(dāng)然,如果重試超過的一定次數(shù),還是沒有成功,我們就需要向業(yè)務(wù)層發(fā)送報錯信息了。
如果刪除緩存成功,就要把數(shù)據(jù)從消息隊列中移除,避免重復(fù)操作,否則就繼續(xù)重試。

為什么是刪除緩存,而不是更新緩存呢?

刪除一個數(shù)據(jù),相比更新一個數(shù)據(jù)更加輕量級,出問題的概率更小。在實際業(yè)務(wù)中,緩存的數(shù)據(jù)可能不是直接來自數(shù)據(jù)庫表,也許來自多張底層數(shù)據(jù)表的聚合。

比如商品詳情信息,在底層可能會關(guān)聯(lián)商品表、價格表、庫存表等,如果更新了一個價格字段,那么就要更新整個數(shù)據(jù)庫,還要關(guān)聯(lián)的去查詢和匯總各個周邊業(yè)務(wù)系統(tǒng)的數(shù)據(jù),這個操作會非常耗時。 從另外一個角度,不是所有的緩存數(shù)據(jù)都是頻繁訪問的,更新后的緩存可能會長時間不被訪問,所以說,從計算資源和整體性能的考慮,更新的時候刪除緩存,等到下次查詢命中再填充緩存,是一個更好的方案。文章來源地址http://www.zghlxwxcb.cn/news/detail-819898.html

到了這里,關(guān)于Redis---數(shù)據(jù)庫和緩存如何保證一致性?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • redis的緩存更新策略以及如何保證redis與數(shù)據(jù)庫的數(shù)據(jù)一致性

    redis的緩存更新策略有這么幾種: 1、由應(yīng)用直接和redis以及數(shù)據(jù)庫相連接: ?? ??? ?查詢數(shù)據(jù)時,應(yīng)用去redis中查詢,查不到的話再由應(yīng)用去數(shù)據(jù)庫中查詢,并將查詢結(jié)果放在redis; ?? ??? ?更新數(shù)據(jù)時,由應(yīng)用去觸發(fā)redis數(shù)據(jù)的刪除以及數(shù)據(jù)庫的update。 2、應(yīng)用只跟redi

    2024年02月13日
    瀏覽(25)
  • 如何保證緩存和數(shù)據(jù)庫的數(shù)據(jù)一致性

    如何保證緩存和數(shù)據(jù)庫的數(shù)據(jù)一致性

    若數(shù)據(jù)庫更新成功,刪除緩存操作失敗,則此后讀到的都是緩存中過期的數(shù)據(jù),造成不一致問題。 同刪除緩存策略一樣,若數(shù)據(jù)庫更新成功緩存更新失敗則會造成數(shù)據(jù)不一致問題。 若緩存更新成功數(shù)據(jù)庫更新失敗, 則此后讀到的都是未持久化的數(shù)據(jù)。因為緩存中的數(shù)據(jù)是易

    2023年04月19日
    瀏覽(40)
  • 如何保證數(shù)據(jù)庫和緩存雙寫一致性?

    如何保證數(shù)據(jù)庫和緩存雙寫一致性?

    如何保證數(shù)據(jù)庫和緩存雙寫一致性,是面試中經(jīng)常被問的一個技術(shù)問題,程序汪推薦大家有必要好好研究一波 數(shù)據(jù)庫和緩存(比如:redis)雙寫數(shù)據(jù)一致性問題,是一個跟開發(fā)語言無關(guān)的公共問題。尤其在高并發(fā)的場景下,這個問題變得更加嚴(yán)重。 我很負(fù)責(zé)的告訴大家,該問

    2024年01月18日
    瀏覽(41)
  • 如何保證緩存與數(shù)據(jù)庫雙寫時的數(shù)據(jù)一致性?

    如何保證緩存與數(shù)據(jù)庫雙寫時的數(shù)據(jù)一致性?

    背景:使用到緩存,無論是本地內(nèi)存做緩存還是使用?Redis?做緩存,那么就會存在數(shù)據(jù)同步的問題,因為配置信息緩存在內(nèi)存中,而內(nèi)存時無法感知到數(shù)據(jù)在數(shù)據(jù)庫的修改。這樣就會造成數(shù)據(jù)庫中的數(shù)據(jù)與緩存中數(shù)據(jù)不一致的問題。 共有四種方案: 先更新數(shù)據(jù)庫,后更新緩

    2024年01月24日
    瀏覽(25)
  • 126、高頻Redis面試題:如何保證Redis和數(shù)據(jù)庫數(shù)據(jù)一致性

    126、高頻Redis面試題:如何保證Redis和數(shù)據(jù)庫數(shù)據(jù)一致性

    問題:如果數(shù)據(jù)庫中的某條數(shù)據(jù)放入緩存后,又馬上被更新了,那我們應(yīng)該如何更新緩存 缺點: 如果先更新緩存成功,在更新數(shù)據(jù)庫的時候失敗,這時候會導(dǎo)致數(shù)據(jù)不一致;緩存的作用是不是臨時將我們數(shù)據(jù)保存在內(nèi)存,便于提高查詢速度;但是如果某條數(shù)據(jù)在數(shù)據(jù)庫中都

    2024年02月13日
    瀏覽(27)
  • mysql和redis如何保證數(shù)據(jù)庫一致性

    如果對于小公司的單機服務(wù)器來說在更新和刪除mysql數(shù)據(jù)的同時對redis緩存進(jìn)行更新或者刪除就行,一般有兩個選擇,例如: 先更新MySQL,后刪除(或更新)Redis 先刪除(或更新)Redis,后更新MySQL 但是不管使用其中哪種方式,都存在兩個可能的問題: 由于第一步與第二步并不是原

    2023年04月24日
    瀏覽(25)
  • Redis如何保障緩存與數(shù)據(jù)庫的數(shù)據(jù)一致性問題?

    Redis如何保障緩存與數(shù)據(jù)庫的數(shù)據(jù)一致性問題?

    目錄 一.最經(jīng)典的數(shù)據(jù)庫加緩存的雙寫雙刪模式 二. 高并發(fā)場景下的緩存+數(shù)據(jù)庫雙寫不一致問題分析與解決方案設(shè)計 三、上面高并發(fā)的場景下,該解決方案要注意的問題 1.1 Cache Aside Pattern概念以及讀寫邏輯 (1)讀的時候,先讀緩存,緩存沒有的話,那么就讀數(shù)據(jù)庫,然后取

    2023年04月21日
    瀏覽(29)
  • 怎么保證緩存與數(shù)據(jù)庫的最終一致性?

    怎么保證緩存與數(shù)據(jù)庫的最終一致性?

    目錄 零.讀數(shù)據(jù)的標(biāo)準(zhǔn)操作 一.Cache aside Patten--旁路模式 二.Read/Write Through Pattern--讀寫穿透 三.Write Back?Pattern--寫回 四.運用canal監(jiān)聽mysql的binlog實現(xiàn)緩存同步 這里想說的是不管哪種模式讀操作都是一樣的,這是一種統(tǒng)一的規(guī)范: 但寫操作和同步策略卻有不同。 這個是最常見的

    2024年04月08日
    瀏覽(26)
  • 怎樣保證數(shù)據(jù)庫和redis里的數(shù)據(jù)一致性

    使用緩存更新策略:在更新數(shù)據(jù)庫時,同時更新Redis中相應(yīng)的數(shù)據(jù)。這可以通過編寫代碼來實現(xiàn),在數(shù)據(jù)庫更新操作完成后,同步更新Redis中對應(yīng)的數(shù)據(jù)。這可以通過在代碼中使用事務(wù)來保證更新的原子性,確保數(shù)據(jù)庫和Redis中的數(shù)據(jù)保持一致。 使用消息隊列:可以將數(shù)據(jù)庫更

    2024年02月19日
    瀏覽(27)
  • redis實戰(zhàn)-緩存數(shù)據(jù)&解決緩存與數(shù)據(jù)庫數(shù)據(jù)一致性

    redis實戰(zhàn)-緩存數(shù)據(jù)&解決緩存與數(shù)據(jù)庫數(shù)據(jù)一致性

    緩存( Cache),就是數(shù)據(jù)交換的 緩沖區(qū) ,俗稱的緩存就是 緩沖區(qū)內(nèi)的數(shù)據(jù) ,一般從數(shù)據(jù)庫中獲取,存儲于本地代碼。防止過高的數(shù)據(jù)訪問猛沖系統(tǒng),導(dǎo)致其操作線程無法及時處理信息而癱瘓,這在實際開發(fā)中對企業(yè)講,對產(chǎn)品口碑,用戶評價都是致命的;所以企業(yè)非常重視緩存技術(shù),

    2024年02月12日
    瀏覽(36)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包