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

【4種方案】如何保證Redis與數(shù)據(jù)庫的數(shù)據(jù)一致!

這篇具有很好參考價(jià)值的文章主要介紹了【4種方案】如何保證Redis與數(shù)據(jù)庫的數(shù)據(jù)一致!。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

如何保證Redis與數(shù)據(jù)庫的數(shù)據(jù)一致

ONE 案例

先刪除“緩存”再去更新“數(shù)據(jù)庫”。但是該方案還存在問題:

????????在高并發(fā)情況下,第一個(gè)線程刪除緩存,還沒來得及去操作數(shù)據(jù)庫,這時(shí)第二個(gè)線程訪問緩存,發(fā)現(xiàn)為null,于是去數(shù)據(jù)庫查詢,獲取到需要的值,這時(shí)候第一個(gè)線程才開始操作數(shù)據(jù)庫,然后設(shè)置緩存,但是第二個(gè)線程又跟奇怪的將第一個(gè)線程剛設(shè)置的緩存給覆蓋掉,然后就出現(xiàn)“烏龍”,數(shù)據(jù)不一致的問題也出現(xiàn)了!

解決方案:

① 先操作緩存去修改數(shù)據(jù)庫,但不刪除緩存。將這個(gè)不刪除的緩存設(shè)置為一個(gè)特殊值(*123),當(dāng)客戶端讀緩存的時(shí)候,發(fā)現(xiàn)有前綴包含( * ???),知道他是壞值,就會(huì)進(jìn)行休眠(1秒這樣),然后再去查詢Redis。 //這樣做的弊端是:特殊值對(duì)業(yè)務(wù)可能出現(xiàn)影響,休眠時(shí)間會(huì)重復(fù)(高并發(fā)情況下,修改操作頻繁,反復(fù)會(huì)修改這個(gè)特殊值的內(nèi)容,然后同時(shí)出現(xiàn)睡眠),影響性能。

②延遲雙刪,先刪除緩存數(shù)據(jù),再把數(shù)據(jù)更新到數(shù)據(jù)庫中,休眠一會(huì)(根據(jù)業(yè)務(wù)邏輯的耗時(shí),更改休眠時(shí)間)后再次刪除該緩存數(shù)據(jù)。若線程1是更新請(qǐng)求,線程2是查詢請(qǐng)求,延遲雙刪,可以保證再這兩個(gè)請(qǐng)求同時(shí)存在的情況下的數(shù)據(jù)一致性!確保查詢請(qǐng)求結(jié)束,更新請(qǐng)求可以刪除查詢請(qǐng)求造成的緩存臟數(shù)據(jù)。

總結(jié):寫操作不能太頻繁!

TWO 案例

先刪除“數(shù)據(jù)庫”再去更新“緩存”。

該案例的問題是:數(shù)據(jù)庫寫完之后,再刪除緩存,但刪除失敗了,這會(huì)導(dǎo)致數(shù)據(jù)不一致。

解決方案:

①給緩存設(shè)置一個(gè)過期時(shí)間,但缺點(diǎn)是,過期時(shí)間內(nèi) 不能保證數(shù)據(jù)是有用的數(shù)據(jù),可能是上次沒刪掉的壞數(shù)據(jù)。

②引入MQ,保證原子操作。

一個(gè)去刪緩存,一個(gè)去操作數(shù)據(jù)庫。MQ若是刪除操作失敗了,啟動(dòng)MQ重試機(jī)制,在重試的這段時(shí)間,緩存數(shù)據(jù)不會(huì)更新。

③將熱點(diǎn)數(shù)據(jù)緩存設(shè)置為永不過期,但是在value當(dāng)中寫入一個(gè)邏輯上的過期時(shí)間,另外起一個(gè)后臺(tái)線程,掃描這些key,對(duì)于已邏輯上過期的緩存,進(jìn)行刪除。

總結(jié):始終只能保證一定時(shí)間內(nèi)的最終一致性。

THREE 案例

Redis和Mysql集群實(shí)現(xiàn)的讀寫分離架構(gòu)

????????如果MySQL采用的是讀寫分離的架構(gòu),主從服務(wù)器之間也會(huì)存在時(shí)間差,也就是A更新操作,刪除緩存,并請(qǐng)求主數(shù)據(jù)庫進(jìn)行數(shù)據(jù)更新,主庫與從庫進(jìn)行同步數(shù)據(jù)的操作,B進(jìn)行查詢操作時(shí),緩存中沒有數(shù)據(jù),就去從庫中讀取數(shù)據(jù),此時(shí)主從數(shù)據(jù)未更新完成,拿到的還是舊數(shù)據(jù)。

解決方法是:查詢數(shù)據(jù)經(jīng)過Redis時(shí),若查詢緩存為空時(shí),強(qiáng)制將其指向主數(shù)據(jù)庫中進(jìn)行查詢。

Four 案例

異步更新緩存(基于訂閱binlog的同步機(jī)制)

MySQL binlog增量訂閱消費(fèi)+消息隊(duì)列+增量數(shù)據(jù)更新到redis

讀Redis:熱數(shù)據(jù)基本都在Redis

寫MySQL:增刪改都是操作MySQL

更新Redis數(shù)據(jù):MySQ的數(shù)據(jù)操作binlog,來更新到Redis Redis更新

①數(shù)據(jù)操作主要分為兩大塊:

一個(gè)是全量(將全部數(shù)據(jù)一次寫入到redis)

一個(gè)是增量(實(shí)時(shí)更新) 這里說的是增量,指的是mysql的update、insert、delate變更數(shù)據(jù)。

讀取binlog后分析 ,利用消息隊(duì)列,推送更新各臺(tái)的redis緩存數(shù)據(jù)。

這樣一旦MySQL中產(chǎn)生了新的寫入、更新、刪除等操作,就可以把binlog相關(guān)的消息推送至Redis,Redis再根據(jù)binlog中的記錄,對(duì)Redis進(jìn)行更新。

這種機(jī)制,很類似MySQL的主從備份機(jī)制,因?yàn)镸ySQL的主備也是通過binlog來實(shí)現(xiàn)的數(shù)據(jù)一致性。

這里可以結(jié)合使用canal(阿里的一款開源框架),通過該框架可以對(duì)MySQL的binlog進(jìn)行訂閱,而canal正是模仿了mysql的slave數(shù)據(jù)庫的備份請(qǐng)求,使得Redis的數(shù)據(jù)更新達(dá)到了相同的效果。

參考文獻(xiàn)

如何保證Redis與數(shù)據(jù)庫的數(shù)據(jù)一致性_mr.two white的博客-CSDN博客_redis保證數(shù)據(jù)一致性

面試33-如何保證Redis與數(shù)據(jù)庫的數(shù)據(jù)一致_嗶哩嗶哩_bilibili文章來源地址http://www.zghlxwxcb.cn/news/detail-633793.html

到了這里,關(guān)于【4種方案】如何保證Redis與數(shù)據(jù)庫的數(shù)據(jù)一致!的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

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

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

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

    熟練掌握Redis緩存技術(shù)? 那么請(qǐng)問Redis緩存中有幾種讀寫策略,又是如何保證與數(shù)據(jù)庫的一致性問題 今天來聊一聊常用的三種緩存讀寫策略 首先我們來思考一個(gè)問題 寫 先更新緩存 再更新數(shù)據(jù)庫 首先如果緩存更新成功但數(shù)據(jù)庫更新失敗,會(huì)導(dǎo)致數(shù)據(jù)不一致的問題 其次當(dāng)請(qǐng)求

    2024年02月14日
    瀏覽(23)
  • Redis緩存MySQL數(shù)據(jù)庫存儲(chǔ)二者如何保證數(shù)據(jù)一致性

    在大型互聯(lián)網(wǎng)應(yīng)用中,由于數(shù)據(jù)庫讀寫頻繁、壓力大等原因,我們通常會(huì)使用緩存來減少數(shù)據(jù)庫的訪問次數(shù),提高系統(tǒng)的性能。而Redis作為一個(gè)高性能的內(nèi)存數(shù)據(jù)庫,成為了緩存的首選方案之一。但是,緩存和數(shù)據(jù)庫之間存在數(shù)據(jù)一致性的問題,如何解決這個(gè)問題呢?本文將

    2023年04月19日
    瀏覽(27)
  • redis面試題目-如何保證數(shù)據(jù)庫與緩存的數(shù)據(jù)一致性

    原視頻:https://www.bilibili.com/video/BV1Km4y1r75f?p=62vd_source=fa75329ae3880aa55609265a0e9f5d34 由于緩存和數(shù)據(jù)庫是分開的,無法做到原子性的同時(shí)進(jìn)行數(shù)據(jù)修改,可能出現(xiàn)緩存更新失敗,或者數(shù)據(jù)庫更新失敗的情況,這時(shí)候會(huì)出現(xiàn)數(shù)據(jù)不一致,影響前端業(yè)務(wù) 先更新數(shù)據(jù)庫,再更新緩存。緩

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

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

    2024年02月19日
    瀏覽(26)
  • Redis和數(shù)據(jù)庫保持?jǐn)?shù)據(jù)一致性方案

    Redis和數(shù)據(jù)庫保持?jǐn)?shù)據(jù)一致性方案

    Redis和數(shù)據(jù)庫一致性又稱為“雙寫一致性”,在分布式系統(tǒng)中,由于多個(gè)節(jié)點(diǎn)之間的并發(fā)讀寫操作,可能導(dǎo)致數(shù)據(jù)不一致的情況發(fā)生。本文將著重介紹如何通過使用Redis與數(shù)據(jù)庫相結(jié)合的方案來實(shí)現(xiàn)數(shù)據(jù)一致性。 首先,讀取數(shù)據(jù)時(shí)都是先查詢Redis,命中則直接返回,未命中則先

    2024年02月11日
    瀏覽(25)
  • redis和數(shù)據(jù)庫的一致性問題的解決方案

    redis和數(shù)據(jù)庫的一致性問題的解決方案

    當(dāng)前沒有框架能夠保證redis的數(shù)據(jù)和數(shù)據(jù)庫的完全一致性,所以需要 我們自己在性能和一致性上作取舍。 下圖就是兩種在redis緩存數(shù)據(jù)庫內(nèi)容時(shí)的使用。 那么如一個(gè)節(jié)點(diǎn)的兩個(gè)圖: 緩存的生成,是在首次查詢或者緩存過期時(shí)間到或者緩存被其他業(yè)務(wù)刪除,進(jìn)而需要在數(shù)據(jù)庫

    2023年04月08日
    瀏覽(18)
  • REDIS21_緩存雙寫一致方案、先更新數(shù)據(jù)庫再刪除緩存

    REDIS21_緩存雙寫一致方案、先更新數(shù)據(jù)庫再刪除緩存

    ①. 緩存雙寫一致性,談?wù)勀愕睦斫?如果redis中有數(shù)據(jù),需要和數(shù)據(jù)庫中的值相同 如果redis中無數(shù)據(jù),數(shù)據(jù)庫中的值要是最新值 ②. 什么時(shí)候同步直寫? 小數(shù)據(jù),某條、某一小戳熱點(diǎn)數(shù)據(jù),要求立刻變更,可以前臺(tái)服務(wù)降價(jià)一下,后臺(tái)馬上同步直寫 ③. 什么時(shí)候異步緩寫? 正常業(yè)務(wù),馬

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

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

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

    2023年04月21日
    瀏覽(29)
  • Redis 緩存與數(shù)據(jù)庫雙寫不一致如何解決

    Redis緩存與數(shù)據(jù)庫雙寫不一致是一個(gè)常見的挑戰(zhàn),但可以通過一些方法來解決或減輕這種不一致性。以下是一些可能的解決方案: 事務(wù)處理: 在進(jìn)行緩存和數(shù)據(jù)庫雙寫時(shí),確保它們被包含在同一事務(wù)中。這可以通過使用支持事務(wù)的數(shù)據(jù)庫和Redis事務(wù)來實(shí)現(xiàn)。這樣,要么兩者同

    2024年01月21日
    瀏覽(24)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包