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

緩存與數(shù)據(jù)庫雙寫一致性幾種策略分析

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

作者:京東零售?于瀧

一、背景

在高并發(fā)場景中,為防止大量請求直接訪問數(shù)據(jù)庫,緩解數(shù)據(jù)庫壓力,常用的方式一般會增加緩存層起到緩沖作用,減少數(shù)據(jù)庫壓力。引入緩存,就會涉及到緩存與數(shù)據(jù)庫中數(shù)據(jù)如何保持一致性問題,本文將對幾種緩存與數(shù)據(jù)庫保證數(shù)據(jù)一致性的使用方式進行分析。為保證高并發(fā)性能,以下分析場景不考慮執(zhí)行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。

二、讀取過程

? 讀緩存

? 如果緩存里沒有值,那就讀取數(shù)據(jù)庫的值

? 同時把這個值寫進緩存中

三、更新過程

更新操作有多種策略,各有優(yōu)劣,主要針對此場景進行分析

策略1:先更新db,再刪除緩存(常用的Cache-Aside Pattern旁路緩存)

問題:

1.如果更新db成功,刪緩存失敗,將導致數(shù)據(jù)不一致

2.極端場景,請求A讀,B寫

1)此時緩存剛好失效 2)A查庫得到舊值 3)B更新DB成功

4)B刪除緩存 5)A將查到的舊值更新到緩存中

此場景的發(fā)生需要步驟2)查db 始終慢于 3)的更新db,才能導致4)先于5)執(zhí)行,通常db的查詢是要快于寫入的,所以此極端場景的產(chǎn)生過于嚴格,不易發(fā)生

策略2:先更新db,再更新緩存

問題:

1.并發(fā)更新場景下,更新緩存會導致數(shù)據(jù)不一致

2.根據(jù)讀寫比,考慮是否有必要頻繁同步更新緩存,而且,如果構造緩存中數(shù)據(jù)過于復雜,或者數(shù)據(jù)更新頻繁,但是讀取并不頻繁的情況,還會造成不必要的性能損耗

此種方式不推薦

策略3:先更新緩存,再更新db

同上,不推薦

策略4:先刪緩存,再更新db

先刪緩存,雖然解決了策略1中,后刪緩存如果失敗的場景,但也會發(fā)生不一致的問題

例如:請求 A 刪除緩存,這時請求B來查,就會擊穿到數(shù)據(jù)庫,B讀取到舊的值后寫入緩存,A正常更新db,由于時間差導致數(shù)據(jù)不一致的情況

策略5:緩存延時雙刪

該策略兼容了策略1和策略4,解決了先刪緩存還是后刪緩存的問題,如策略1中,更新db后刪緩存失敗和策略4中的不一致場景,該策略可以將延時時間內(比如延時10ms)所造成的緩存臟數(shù)據(jù),再次刪除。但是,如果延時刪緩存失敗,策略4中不一致問題還會發(fā)生,同時延時的實現(xiàn),如創(chuàng)建線程,或者引入mq異步,可能會增加系統(tǒng)復雜度問題。

策略6:變種雙刪,前置緩存過期時間

該策略針對策略1中后刪緩存失敗的場景,前置一層緩存數(shù)據(jù)過期時間(具體時間根據(jù)自身系統(tǒng)本身評估,如可覆蓋db讀寫耗時或一致性容忍度等),更新db后就算刪緩存失敗,在expire時間后也能保證緩存中無數(shù)據(jù)。同時,前置expire失敗,或者更新db失敗,都不會影響數(shù)據(jù)一致。

能夠解決策略4中的問題:請求 A 刪除緩存,這時請求B來查,就會擊穿到數(shù)據(jù)庫,B讀取到舊的值后寫入緩存,A正常更新db,由于時間差導致數(shù)據(jù)不一致的情況,描述圖如下:

本策略中步驟1為expire緩存,不會發(fā)生擊穿緩存到數(shù)據(jù)庫的情況,數(shù)據(jù)將直接返回。除非更極端情況,如下圖:

expire時間沒有覆蓋住更新db的耗時,類似策略1中極端場景,此處不贅述

四、總結

對于每種方案策略,各有利弊,但一致性問題始終存在(文章開頭排除了原子性和鎖),只是發(fā)生的幾率在一點點慢慢變小了,方案的評估不僅要根據(jù)自身系統(tǒng)的業(yè)務場景,如讀寫比、并發(fā)量、一致性容忍度,還要考慮系統(tǒng)復雜度,投入產(chǎn)出比等,尋找最合適的方案。文章來源地址http://www.zghlxwxcb.cn/news/detail-418467.html

到了這里,關于緩存與數(shù)據(jù)庫雙寫一致性幾種策略分析的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關文章

  • 緩存和數(shù)據(jù)庫一致性

    緩存和數(shù)據(jù)庫一致性

    項目的難點是如何保證緩存和數(shù)據(jù)庫的一致性。無論我們是先更新數(shù)據(jù)庫,后更新緩存還是先更新數(shù)據(jù)庫,然后刪除緩存,在并發(fā)場景之下,仍然會存在數(shù)據(jù)不一致的情況(也存在刪除失敗的情況,刪除失敗可以使用異步重試解決)。有一種解決方法是延遲雙刪的策略,先刪

    2024年01月17日
    瀏覽(24)
  • Redis 原理緩存過期、一致性hash、雪崩、穿透、并發(fā)、布隆、緩存更新策略、緩存數(shù)據(jù)庫一致性

    Redis 原理緩存過期、一致性hash、雪崩、穿透、并發(fā)、布隆、緩存更新策略、緩存數(shù)據(jù)庫一致性

    redis的過期策略可以通過配置文件進行配置 redis會把設置了過期時間的key放在單獨的字典中,定時遍歷來刪除到期的key。 1).每100ms從過期字典中 隨機挑選20個,把其中過期的key刪除; 2).如果過期的key占比超過1/4,重復步驟1 為了保證不會循環(huán)過度,導致卡頓,掃描時間上限

    2024年02月08日
    瀏覽(31)
  • 緩存和數(shù)據(jù)庫一致性問題分析

    目錄 1、數(shù)據(jù)不一致的原因 1.1 并發(fā)操作 1.2 非原子操作 1.3 數(shù)據(jù)庫主從同步延遲 2、數(shù)據(jù)不一致的解決方案 2.1 并發(fā)操作 2.2 非原子操作 2.3 主從同步延遲 2.4 最終方案 3、不同場景下的特殊考慮 3.1 讀多寫少的場景 3.2 讀少寫多的場景 導致緩存和數(shù)據(jù)庫數(shù)據(jù)不一致的原因有三個

    2024年02月14日
    瀏覽(25)
  • 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è)講,對產(chǎn)品口碑,用戶評價都是致命的;所以企業(yè)非常重視緩存技術,

    2024年02月12日
    瀏覽(36)
  • 如何保證緩存和數(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)
  • Redis如何保證緩存和數(shù)據(jù)庫一致性?

    現(xiàn)在我們在面向增刪改查開發(fā)時,數(shù)據(jù)庫數(shù)據(jù)量大時或者對響應要求較快,我們就需要用到Redis來拿取數(shù)據(jù)。 Redis:是一種高性能的內存數(shù)據(jù)庫,它將數(shù)據(jù)以鍵值對的形式存儲在內存中,具有讀寫速度快、支持多種數(shù)據(jù)類型、原子性操作、豐富的特性等優(yōu)勢。 優(yōu)勢: 性能極高

    2024年01月16日
    瀏覽(41)
  • 怎么保證緩存與數(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)
  • Redis---數(shù)據(jù)庫和緩存如何保證一致性?

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

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

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

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

    2023年04月21日
    瀏覽(29)
  • 如何保證Redis緩存和數(shù)據(jù)庫的一致性問題

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

    2024年02月14日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包