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

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

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

背景

現(xiàn)在我們在面向增刪改查開發(fā)時,數(shù)據(jù)庫數(shù)據(jù)量大時或者對響應要求較快,我們就需要用到Redis來拿取數(shù)據(jù)。

Redis:是一種高性能的內存數(shù)據(jù)庫,它將數(shù)據(jù)以鍵值對的形式存儲在內存中,具有讀寫速度快、支持多種數(shù)據(jù)類型、原子性操作、豐富的特性等優(yōu)勢。

優(yōu)勢:

  1. 性能極高:Redis的讀速度可以達到110000次/s,寫速度可以達到81000次/s,這主要得益于它基于內存存儲的特點,以及其單線程事件驅動架構的設計。
  2. 豐富的數(shù)據(jù)類型:Redis不僅僅支持簡單的key-value類型的數(shù)據(jù),同時還提供list,set,zset,hash等數(shù)據(jù)結構的存儲,這些數(shù)據(jù)結構可以滿足多種應用場景的需求。
  3. 原子性操作:Redis的所有操作都是原子性的,這意味著這些操作要么成功執(zhí)行,要么失敗完全不執(zhí)行。這為Redis在實現(xiàn)事務和并發(fā)控制方面提供了極大的便利。
  4. 豐富的特性:Redis還支持發(fā)布/訂閱、通知、鍵過期、事務、管道、Lua腳本、集群分片和數(shù)據(jù)復制等功能。這些特性使得Redis在實現(xiàn)消息隊列、緩存系統(tǒng)、分布式系統(tǒng)等方面具有很大的優(yōu)勢。
  5. 支持持久化:Redis支持數(shù)據(jù)的持久化,可以將內存中的數(shù)據(jù)保存在磁盤中,重啟的時候可以再次加載進行使用。這使得Redis的數(shù)據(jù)不會因為重啟或者宕機而丟失。
  6. 支持備份和恢復:Redis支持數(shù)據(jù)的備份和恢復,即master-slave模式的數(shù)據(jù)備份。這為Redis的數(shù)據(jù)安全提供了保障。
  7. 豐富的客戶端:Redis支持各種各樣的語言的客戶端接入,包括Python、Java、C#、PHP等。這使得開發(fā)者可以使用自己熟悉的編程語言來操作Redis。

綜上所述,對Redis有個簡單的理解。

常用方式

  1. 啟動項目時將熱點數(shù)據(jù)放入redis緩存中(如果沒這樣做,直接看第二點)
  2. 用戶請求過來之后,先查緩存有沒有數(shù)據(jù),如果有則直接返回。
  3. 如果緩存沒數(shù)據(jù),再繼續(xù)查數(shù)據(jù)庫。
  4. 如果數(shù)據(jù)庫有數(shù)據(jù),則將查詢出來的數(shù)據(jù),放入緩存中,然后返回該數(shù)據(jù)。
  5. 如果數(shù)據(jù)庫也沒數(shù)據(jù),則直接返回空。

此時,問題來了,假如說我們的熱點數(shù)據(jù)是人員信息,此時新增了一條張三的信息,你再去緩存拿取的時候是不會有張三這條信息的,因為數(shù)據(jù)只是更新在了數(shù)據(jù)庫并沒有更新在緩存中。此時測試人員可能就會有疑問,明明新增成功了,但是數(shù)據(jù)呢?所以我們需要保證Redis緩存與數(shù)據(jù)庫數(shù)據(jù)一致的問題。

解決

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

先刪除緩存,數(shù)據(jù)庫還沒有更新成功,此時如果讀取緩存,緩存不存在,去數(shù)據(jù)庫中讀取到的是舊值,緩存不一致發(fā)生。

1.1 解決方案:延時雙刪

延時雙刪的方案的思路是,為了避免更新數(shù)據(jù)庫的時候,其他線程從緩存中讀取不到數(shù)據(jù),就在更新完數(shù)據(jù)庫之后,再 sleep 一段時間,然后再次刪除緩存。

sleep 的時間要對業(yè)務讀寫緩存的時間做出評估,sleep 時間大于讀寫緩存的時間即可。

流程如下:

  1. 線程1刪除緩存,然后去更新數(shù)據(jù)庫
  2. 線程2來讀緩存,發(fā)現(xiàn)緩存已經被刪除,所以直接從數(shù)據(jù)庫中讀取,這時候由于線程1還沒有更新完成,所以讀到的是舊值,然后把舊值寫入緩存
  3. 線程1,根據(jù)估算的時間,sleep,由于sleep的時間大于線程2讀數(shù)據(jù)+寫緩存的時間,所以緩存被再次刪除
  4. 如果還有其他線程來讀取緩存的話,就會再次從數(shù)據(jù)庫中讀取到最新值。

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

如果反過來操作,先更新數(shù)據(jù)庫,再刪除緩存呢?

這個就更明顯的問題了,更新數(shù)據(jù)庫成功,如果刪除緩存失敗或者還沒有來得及刪除,那么,其他線程從緩存中讀取到的就是舊值,還是會發(fā)生不一致。

2.1 解決方案一:借用消息中間件幫助完成

先更新數(shù)據(jù)庫,成功后往消息隊列發(fā)消息,消費到消息后再刪除緩存,借助消息隊列的重試機制來實現(xiàn),達到最終一致性的效果。

問題:
  1. 引入消息中間件之后,問題更復雜了,怎么保證消息不丟失,怎么樣保證消息的有序性等問題隨之而來。
  2. 就算更新數(shù)據(jù)庫和刪除緩存都沒有發(fā)生問題,消息的延遲也會帶來短暫的不一致性,不過這個延遲相對來說還是可以接受的
2.2 設置緩存過期時間

每次放入緩存的時候,設置一個過期時間,比如 5 分鐘,以后的操作只修改數(shù)據(jù)庫,不操作緩存,等待緩存超時后從數(shù)據(jù)庫重新讀取。

問題:

如果數(shù)據(jù)更新的特別頻繁,不一致性的問題就很麻煩文章來源地址http://www.zghlxwxcb.cn/news/detail-793285.html

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

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

領支付寶紅包贊助服務器費用

相關文章

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

    redis的緩存更新策略有這么幾種: 1、由應用直接和redis以及數(shù)據(jù)庫相連接: ?? ??? ?查詢數(shù)據(jù)時,應用去redis中查詢,查不到的話再由應用去數(shù)據(jù)庫中查詢,并將查詢結果放在redis; ?? ??? ?更新數(shù)據(jù)時,由應用去觸發(fā)redis數(shù)據(jù)的刪除以及數(shù)據(jù)庫的update。 2、應用只跟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日
    瀏覽(39)
  • 如何保證數(shù)據(jù)庫和緩存雙寫一致性?

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

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

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

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

    背景:使用到緩存,無論是本地內存做緩存還是使用?Redis?做緩存,那么就會存在數(shù)據(jù)同步的問題,因為配置信息緩存在內存中,而內存時無法感知到數(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ù)放入緩存后,又馬上被更新了,那我們應該如何更新緩存 缺點: 如果先更新緩存成功,在更新數(shù)據(jù)庫的時候失敗,這時候會導致數(shù)據(jù)不一致;緩存的作用是不是臨時將我們數(shù)據(jù)保存在內存,便于提高查詢速度;但是如果某條數(shù)據(jù)在數(shù)據(jù)庫中都

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

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

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

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

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

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

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

    目錄 零.讀數(shù)據(jù)的標準操作 一.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中相應的數(shù)據(jù)。這可以通過編寫代碼來實現(xiàn),在數(shù)據(jù)庫更新操作完成后,同步更新Redis中對應的數(shù)據(jù)。這可以通過在代碼中使用事務來保證更新的原子性,確保數(shù)據(jù)庫和Redis中的數(shù)據(jù)保持一致。 使用消息隊列:可以將數(shù)據(jù)庫更

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

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

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

    2024年02月12日
    瀏覽(35)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包