91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

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

OSC開源社區(qū) ? 來源:OSCHINA 社區(qū) ? 2023-04-21 10:27 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、背景

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

二、讀取過程

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

?讀緩存

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

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

三、更新過程

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

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

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

問題:

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

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

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

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

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

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

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

問題:

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

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

此種方式不推薦

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

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

同上,不推薦

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

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

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

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

策略 5:緩存延時雙刪

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

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

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

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

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

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

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

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

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

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

四、總結(jié)

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





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)庫
    +關(guān)注

    關(guān)注

    7

    文章

    4019

    瀏覽量

    68337

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

文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    是德科技推出全新GDDR7發(fā)射端一致性測試解決方案

    是德科技(NYSE: KEYS )宣布推出全新GDDR7發(fā)射端一致性解決方案,該方案可加速圖形與人工智能(AI)應(yīng)用領(lǐng)域遵循JEDEC標準的驗證進程。
    的頭像 發(fā)表于 03-02 11:05 ?214次閱讀
    是德科技推出全新GDDR7發(fā)射端<b class='flag-5'>一致性</b>測試解決方案

    比斯特通用分選機四線制測試技術(shù)保障電芯性能一致性

    電芯的性能一致性直接決定了終端產(chǎn)品的安全、續(xù)航能力與使用壽命,然而,受制于原材料差異、制造工藝波動等因素,即使是同批次生產(chǎn)的電芯,其電壓、內(nèi)阻等關(guān)鍵參數(shù)仍存在微小偏差。深圳比斯特自動化設(shè)備
    的頭像 發(fā)表于 01-29 16:20 ?152次閱讀
    比斯特通用分選機四線制測試技術(shù)保障電芯性能<b class='flag-5'>一致性</b>

    以太網(wǎng)一致性測試全解析:保障高性能網(wǎng)絡(luò)的關(guān)鍵技術(shù)

    在高速網(wǎng)絡(luò)設(shè)備的設(shè)計與制造中,以太網(wǎng)一致性測試是確保產(chǎn)品性能穩(wěn)定、符合行業(yè)標準的關(guān)鍵環(huán)節(jié)。我們能夠為客戶提供從測試標準解讀到實際問題排查的全方位支持。本文將以100Base-TX和1000Base-T為例,系統(tǒng)介紹以太網(wǎng)一致性測試的核心內(nèi)容與標準依據(jù),幫助客戶理解測試的重
    的頭像 發(fā)表于 01-20 17:42 ?1112次閱讀
    以太網(wǎng)<b class='flag-5'>一致性</b>測試全解析:保障高性能網(wǎng)絡(luò)的關(guān)鍵技術(shù)

    儲能電池一致性,已成核心競爭力

    電子發(fā)燒友網(wǎng)報道(文/黃山明)隨著新型儲能以及長時儲能在儲能中占比越來越多,儲能電池的一致性問題開始凸顯。而所謂的一致性,是指同規(guī)格型號的電池在容量、內(nèi)阻、電壓、自放電率、溫度特性和衰減速度等關(guān)鍵
    的頭像 發(fā)表于 01-08 16:37 ?2497次閱讀

    比斯特1810B自動分選機實現(xiàn)電池性能一致性的保障設(shè)備

    在動力電池和儲能系統(tǒng)快速發(fā)展的當下,電池性能一致性已成為衡量產(chǎn)品質(zhì)量的關(guān)鍵指標。一致性將直接影響電池組的整體性能發(fā)揮,更關(guān)乎產(chǎn)品的安全可靠和使用壽命。深圳比斯特自動化設(shè)備有限公司推出的1810B
    的頭像 發(fā)表于 01-06 17:06 ?507次閱讀
    比斯特1810B自動分選機實現(xiàn)電池性能<b class='flag-5'>一致性</b>的保障設(shè)備

    有關(guān)100M、1000M以太網(wǎng)一致性測試問題探討交流

    100M、1000M以太網(wǎng)一致性測試
    的頭像 發(fā)表于 12-14 10:42 ?498次閱讀
    有關(guān)100M、1000M以太網(wǎng)<b class='flag-5'>一致性</b>測試問題探討交流

    電纜組件相位一致性的意義

    、技術(shù)本質(zhì):定義與量化指標 相位一致性描述的是多通道電纜組件在相同頻率與輸入信號下,各通道輸出信號相位差的穩(wěn)定程度。核心衡量指標包括: 相位偏差 :單通道相位的波動范圍 通道間相位差 :多通道之間
    的頭像 發(fā)表于 11-27 13:41 ?312次閱讀
    電纜組件相位<b class='flag-5'>一致性</b>的意義

    請教大家下DP一致性測試問題

    請教大家下,DP的Vbios中已經(jīng)固定了預(yù)加重和Swing的值,DP的TX信號一致性測試項中Non Pre-Emphasis Level Test(Swing2/Swing0)-PLTPAT,這個測試項意思是Swing2與Swing0偏差嗎?已經(jīng)固定了Swing中,這
    發(fā)表于 11-12 15:57

    解決鋰電池一致性難題!景鋰新能源電池均衡儀為儲能安全/電動車續(xù)航保駕護航

    解決鋰電池一致性難題!景鋰新能源電池均衡儀為儲能/電動車電池續(xù)航保駕護航
    的頭像 發(fā)表于 11-06 11:00 ?657次閱讀

    鏡頭不一致的問題原因分析

    在機器視覺系統(tǒng)的視界,鏡頭一致性猶如維系整個生態(tài)的隱形生命線,貫穿于光學(xué)成像、圖像處理到智能決策的全鏈路,其細微波動足以顛覆整個檢測系統(tǒng)的可靠。當工業(yè)界熱衷于討論算法精度與算力突破時,鏡頭這基礎(chǔ)光學(xué)元件的
    的頭像 發(fā)表于 09-11 09:45 ?1206次閱讀

    數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—服務(wù)器異常斷電導(dǎo)致Oracle數(shù)據(jù)庫故障的數(shù)據(jù)恢復(fù)案例

    Oracle數(shù)據(jù)庫故障: 某公司臺服務(wù)器上部署Oracle數(shù)據(jù)庫。服務(wù)器意外斷電導(dǎo)致數(shù)據(jù)庫報錯,報錯內(nèi)容為“system01.dbf需要更多的恢復(fù)來保持
    的頭像 發(fā)表于 07-24 11:12 ?637次閱讀
    <b class='flag-5'>數(shù)據(jù)庫</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—服務(wù)器異常斷電導(dǎo)致Oracle<b class='flag-5'>數(shù)據(jù)庫</b>故障的<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例

    SQLSERVER數(shù)據(jù)庫是什么

    支持在Linux和容器化環(huán)境中運行。 核心特點 關(guān)系型數(shù)據(jù)庫 基于SQL(結(jié)構(gòu)化查詢語言)進行數(shù)據(jù)操作,支持表、行、列等結(jié)構(gòu)化存儲。 提供ACID(原子、一致性、隔離
    的頭像 發(fā)表于 05-26 09:19 ?1168次閱讀

    車用鋰離子電池機理建模與并聯(lián)模組不一致性研究

    車用鋰離子電池機理建模與并聯(lián)模組不一致性研究
    發(fā)表于 05-16 21:02

    堆焊熔池輪廓實時監(jiān)控,實現(xiàn)工藝穩(wěn)定性與焊縫一致性

    及稀釋程度等關(guān)鍵參數(shù)對焊層質(zhì)量有直接影響,實時監(jiān)控熔池輪廓和溫度分布可及時預(yù)警缺陷并指導(dǎo)參數(shù)優(yōu)化,以保證焊層一致性與工藝穩(wěn)定性。今天起了解堆焊熔池輪廓實時監(jiān)控,實現(xiàn)工藝穩(wěn)定性與焊縫一致性。 堆焊簡介 堆焊,又
    的頭像 發(fā)表于 04-24 17:15 ?664次閱讀
    堆焊熔池輪廓實時監(jiān)控,實現(xiàn)工藝穩(wěn)定性與焊縫<b class='flag-5'>一致性</b>

    一致性校正與邊緣融合拼接

    電子發(fā)燒友網(wǎng)站提供《差一致性校正與邊緣融合拼接.pdf》資料免費下載
    發(fā)表于 04-10 18:02 ?0次下載