chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

一、背景

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

二、讀取過(guò)程

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

?讀緩存

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

?同時(shí)把這個(gè)值寫進(jìn)緩存中

三、更新過(guò)程

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

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

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

問(wèn)題:

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

2. 極端場(chǎng)景,請(qǐng)求 A 讀,B 寫

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

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

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

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

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

問(wèn)題:

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

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

此種方式不推薦

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

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

同上,不推薦

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

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

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

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

策略 5:緩存延時(shí)雙刪

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

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

策略 6:變種雙刪,前置緩存過(guò)期時(shí)間

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

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

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

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

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

expire 時(shí)間沒(méi)有覆蓋住更新 db 的耗時(shí),類似策略 1 中極端場(chǎng)景,此處不贅述

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

四、總結(jié)

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





審核編輯:劉清

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

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

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    SMD 貼片式車規(guī)鋁電解電容 自動(dòng)化生產(chǎn) 高一致性

    SMD貼片式車規(guī)鋁電解電容通過(guò)封裝革新、全流程自動(dòng)化工藝及智能化檢測(cè)技術(shù),實(shí)現(xiàn)了高一致性生產(chǎn),完全適配新能源汽車自動(dòng)化產(chǎn)線需求 。具體分析如下: 、封裝革新:適配自動(dòng)化生產(chǎn)的核心優(yōu)勢(shì) 貼片式
    的頭像 發(fā)表于 12-03 14:47 ?78次閱讀

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

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

    請(qǐng)教大家下DP一致性測(cè)試問(wèn)題

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

    解決鋰電池一致性難題!景鋰新能源電池均衡儀為儲(chǔ)能安全/電動(dòng)車?yán)m(xù)航保駕護(hù)航

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

    直播回顧 | 深度解讀CAN總線一致性測(cè)試的四大層級(jí)與實(shí)戰(zhàn)方法,虹科技術(shù)直播助您破解汽車通信穩(wěn)定性的關(guān)鍵

    ?直播主題CAN總線一致性測(cè)試“一致性測(cè)試是保障總線系統(tǒng)穩(wěn)定、兼容、可靠運(yùn)行的核心環(huán)節(jié)?!彪S著整車電子電氣架構(gòu)日益復(fù)雜,ECU數(shù)量增多、通信負(fù)載加大,CAN節(jié)點(diǎn)之間若存在電氣特性不匹配、時(shí)序偏差
    的頭像 發(fā)表于 10-30 17:34 ?1951次閱讀
    直播回顧 |  深度解讀CAN總線<b class='flag-5'>一致性</b>測(cè)試的四大層級(jí)與實(shí)戰(zhàn)方法,虹科技術(shù)直播助您破解汽車通信穩(wěn)定性的關(guān)鍵

    鏡頭不一致的問(wèn)題原因分析

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

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

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

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

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

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

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

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

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

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

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

    羅德與施瓦茨TS8980FTA-M1 5G一致性測(cè)試系統(tǒng)通過(guò)TPAC認(rèn)證

    一致性測(cè)試工作項(xiàng)目已進(jìn)入“激活”狀態(tài)。這認(rèn)證包括對(duì)5G毫米波頻段組合中獨(dú)立組網(wǎng)(SA)模式下RRM FR2測(cè)試用例的驗(yàn)證,涵蓋單到達(dá)角(1x AoA)和到達(dá)角(2x AoA)場(chǎng)景。
    的頭像 發(fā)表于 02-28 17:22 ?1220次閱讀

    請(qǐng)問(wèn)如何保證多片AD1278的通道之間相位一致性?

    讀取手冊(cè),發(fā)現(xiàn)要保證多片AD1278的通道之間相位一致性需要兩點(diǎn):1、CLK一致;2、SYNC_N同時(shí)拉高。 我的情況: 1、各個(gè)AD1278的CLK來(lái)著不同的時(shí)鐘源,即分別采用10ppm
    發(fā)表于 01-14 06:02

    數(shù)據(jù)庫(kù)是哪種數(shù)據(jù)庫(kù)類型?

    數(shù)據(jù)庫(kù)種部署在虛擬計(jì)算環(huán)境中的數(shù)據(jù)庫(kù),它融合了云計(jì)算的彈性和可擴(kuò)展性,為用戶提供高效、靈活的數(shù)據(jù)庫(kù)服務(wù)。云數(shù)據(jù)庫(kù)主要分為兩大類:關(guān)系型
    的頭像 發(fā)表于 01-07 10:22 ?807次閱讀

    如何使用cmp進(jìn)行數(shù)據(jù)庫(kù)管理的技巧

    使用 cmp 命令進(jìn)行數(shù)據(jù)庫(kù)管理可能不是最直觀的方法,因?yàn)?cmp 通常用于比較兩個(gè)文件是否相同。然而,如果你的意圖是使用 cmp 來(lái)檢查數(shù)據(jù)庫(kù)文件或備份文件的一致性,以下是些技巧和
    的頭像 發(fā)表于 12-17 09:31 ?973次閱讀