吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

緩存與數據庫雙寫一致性幾種策略分析

OSC開源社區 ? 來源:OSCHINA 社區 ? 2023-04-21 10:27 ? 次閱讀

一、背景

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

二、讀取過程

f2d7ca0e-df9c-11ed-bfe3-dac502259ad0.png

?讀緩存

?如果緩存里沒有值,那就讀取數據庫的值

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

三、更新過程

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

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

f2ecfe60-df9c-11ed-bfe3-dac502259ad0.png

問題:

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

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

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

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

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

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

f2f5faa6-df9c-11ed-bfe3-dac502259ad0.png

問題:

1. 并發更新場景下,更新緩存會導致數據不一致

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

此種方式不推薦

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

f3000758-df9c-11ed-bfe3-dac502259ad0.png

同上,不推薦

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

f30af1fe-df9c-11ed-bfe3-dac502259ad0.png

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

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

策略 5:緩存延時雙刪

f31afed2-df9c-11ed-bfe3-dac502259ad0.png

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

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

f3365d08-df9c-11ed-bfe3-dac502259ad0.png

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

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

f349b3d0-df9c-11ed-bfe3-dac502259ad0.png

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

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

f3559e16-df9c-11ed-bfe3-dac502259ad0.png

四、總結

對于每種方案策略,各有利弊,但一致性問題始終存在(文章開頭排除了原子性和鎖),只是發生的幾率在一點點慢慢變小了,方案的評估不僅要根據自身系統的業務場景,如讀寫比、并發量、一致性容忍度,還要考慮系統復雜度,投入產出比等,尋找最合適的方案。





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據庫
    +關注

    關注

    7

    文章

    3848

    瀏覽量

    64691

原文標題:緩存與數據庫雙寫一致性幾種策略分析

文章出處:【微信號:OSC開源社區,微信公眾號:OSC開源社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何使用cmp進行數據庫管理的技巧

    使用 cmp 命令進行數據庫管理可能不是最直觀的方法,因為 cmp 通常用于比較兩個文件是否相同。然而,如果你的意圖是使用 cmp 來檢查數據庫文件或備份文件的一致性,以下是些技巧和
    的頭像 發表于 12-17 09:31 ?181次閱讀

    Sybase數據恢復—Sybase數據庫無法啟動怎么恢復數據

    數據庫數據恢復工程師經過檢測,發現Sybase數據庫出現故障的原因是:異常斷電造成Sybase數據庫無法回正常
    的頭像 發表于 11-30 16:45 ?177次閱讀
    Sybase<b class='flag-5'>數據</b>恢復—Sybase<b class='flag-5'>數據庫</b>無法啟動怎么恢復<b class='flag-5'>數據</b>?

    Oracle報錯“system01.dbf需要更多的恢復來保持一致性”的數據恢復案例

    Oracle數據庫故障&分析臺Oracle數據庫打開報錯,報錯信息: “system01.dbf需要更多的恢復來保持一致性
    的頭像 發表于 11-27 13:10 ?260次閱讀
    Oracle報錯“system01.dbf需要更多的恢復來保持<b class='flag-5'>一致性</b>”的<b class='flag-5'>數據</b>恢復案例

    一致性測試系統的技術原理和也應用場景

    的測試記錄文件進行分析,按照測試報告描述規格生成一致性測試報告。協議一致性測試報告記錄了所有測試案例的測試結果,即成功(PASS)、失敗(FAIL)、不確定(INCONCLUSIVE)。 應用場
    發表于 11-01 15:35

    異構計算下緩存一致性的重要

    在眾多回復中,李博杰同學的回答被認為質量最高。他首先將緩存一致性分為兩個主要場景:是主機內CPU與設備間的一致性;二是跨主機的一致性
    的頭像 發表于 10-24 17:00 ?775次閱讀
    異構計算下<b class='flag-5'>緩存</b><b class='flag-5'>一致性</b>的重要<b class='flag-5'>性</b>

    Oracle數據恢復—異常斷電后Oracle數據庫報錯的數據恢復案例

    Oracle數據庫故障: 機房異常斷電后,Oracle數據庫報錯:“system01.dbf需要更多的恢復來保持一致性數據庫無法打開
    的頭像 發表于 09-30 13:31 ?387次閱讀
    Oracle<b class='flag-5'>數據</b>恢復—異常斷電后Oracle<b class='flag-5'>數據庫</b>啟<b class='flag-5'>庫</b>報錯的<b class='flag-5'>數據</b>恢復案例

    數據庫數據恢復—Oracle數據庫文件system01.dbf損壞的數據恢復案例

    打開oracle數據庫報錯“system01.dbf需要更多的恢復來保持一致性數據庫無法打開”。
    的頭像 發表于 09-21 14:25 ?524次閱讀
    <b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復—Oracle<b class='flag-5'>數據庫</b>文件system01.dbf損壞的<b class='flag-5'>數據</b>恢復案例

    級聯一致性和移相器校準應用手冊

    電子發燒友網站提供《級聯一致性和移相器校準應用手冊.pdf》資料免費下載
    發表于 08-29 10:48 ?0次下載
    級聯<b class='flag-5'>一致性</b>和移相器校準應用手冊

    LIN一致性測試規范2.1

    電子發燒友網站提供《LIN一致性測試規范2.1.pdf》資料免費下載
    發表于 08-15 17:14 ?3次下載

    新品發布 | 同星智能正式推出CAN總線一致性測試系統

    CAN總線一致性測試系統CANFD/CAN總線一致性測試系統,在硬件系統上基于同星自主研發的總線分析工具,干擾儀,一致性測試機箱,并搭配程控電源,示波器,數字萬用表等標準外圍儀器設備;
    的頭像 發表于 07-06 08:21 ?591次閱讀
    新品發布 | 同星智能正式推出CAN總線<b class='flag-5'>一致性</b>測試系統

    銅線鍵合焊接一致性:如何突破技術瓶頸?

    在微電子封裝領域,銅線鍵合技術以其低成本、高效率和良好的電氣性能等優勢,逐漸成為芯片與基板連接的主流方式。然而,銅線鍵合過程中的焊接一致性問題是制約其進步發展和應用的關鍵難題。焊接一致性不僅
    的頭像 發表于 07-04 10:12 ?1935次閱讀
    銅線鍵合焊接<b class='flag-5'>一致性</b>:如何突破技術瓶頸?

    請問ESP-NOW對數據的完整一致性有校驗嗎?

    當使用ESP-NOW時,傳遞的數據在傳輸層有對數據包的完整(比如對面傳給我的字節數和我收到的字節數是否相同)有底層校驗嗎? 還有這個數據包是否經過了CRC等差錯檢測的校驗呢(就是
    發表于 06-17 06:55

     QSFP一致性測試的專業測試設備

    、高速度的光纖接口模塊,廣泛應用于數據中心、高速以太網和光纖通信等領域。本文將詳細探討QSFP一致性測試的目的、測試內容、測試方法以及測試的重要等方面。 QSFP一致性測試的目的是確
    的頭像 發表于 03-14 10:40 ?676次閱讀
     QSFP<b class='flag-5'>一致性</b>測試的專業測試設備

    企業數據備份體系化方法論的七大原則:深入理解數據備份的關鍵原則:應用一致性與崩潰一致性的區別

    在數字化時代,數據備份成為了企業信息安全的核心環節。但在備份過程中,兩個關鍵概念——應用一致性和崩潰一致性,常常被誤解或混淆。本文旨在闡明這兩個概念的差異,并分析它們在
    的頭像 發表于 03-11 14:05 ?527次閱讀
    企業<b class='flag-5'>數據</b>備份體系化方法論的七大原則:深入理解<b class='flag-5'>數據</b>備份的關鍵原則:應用<b class='flag-5'>一致性</b>與崩潰<b class='flag-5'>一致性</b>的區別

    深入理解數據備份的關鍵原則:應用一致性與崩潰一致性的區別

    這兩個概念的差異,并分析它們在數據備份中的重要,以便讀者能夠更有效地保護企業數據。 1. 概念區分: 應用一致性和崩潰
    的頭像 發表于 03-11 11:29 ?1011次閱讀
    深入理解<b class='flag-5'>數據</b>備份的關鍵原則:應用<b class='flag-5'>一致性</b>與崩潰<b class='flag-5'>一致性</b>的區別
    丽都棋牌下载| 高档百家乐桌子| 百家乐开户优惠多的平台是哪家 | 网络棋牌游戏| 百家乐官网网站出售| 百家乐官网线上代理网站| 百家乐官网娱乐平台开户| 大世界百家乐官网赌场娱乐网规则| 百家乐补牌规制| 迷你百家乐的玩法技巧和规则 | 百家乐软件编辑原理| 百家乐e78| 星期八百家乐的玩法技巧和规则| 德州扑克 单机| 線上投注| 娱乐城百家乐官网可以代理吗| 百家乐官网策略网络游戏信誉怎么样 | 百家乐真钱在线| 兰桂坊百家乐的玩法技巧和规则| 大发888娱乐场lm0| 棋牌评测网站| 百家乐官网扑克桌布| 百家乐官网香港六合彩| 百家乐官网游戏开户网址| 百家乐风云论坛| 财神百家乐的玩法技巧和规则| 皇冠网址推介| 博彩网百家乐官网全讯网| 百家乐博赌城| 钟祥市| 保险百家乐官网怎么玩 | 大发888大发娱乐场| 明陞M88娱乐城| 澳门百家乐官网规律星期娱乐城博彩 | 德州扑克荷官| 百家乐官网三宝| 百家乐生活馆| 云霄县| 真人百家乐官网蓝盾赌场娱乐网规则 | 沙龙百家乐赌场娱乐网规则| 五湖四海娱乐城|