一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

分布式系統(tǒng)中先操作數(shù)據(jù)庫還是先操作緩存

數(shù)據(jù)分析與開發(fā) ? 來源:撿田螺的小男孩 ? 作者:撿田螺的小男孩 ? 2021-09-30 14:46 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

在分布式系統(tǒng)中,緩存和數(shù)據(jù)庫同時存在時,如果有寫操作,先操作數(shù)據(jù)庫還是先操作緩存呢?本文將分5種方案展開闡述對比,謝謝閱讀~github地址,衷心感謝每一顆star

?https://github.com/whx123/JavaHome?

緩存維護方案一

如果是一讀(線程B)一寫(線程A)操作,「先操作緩存,再操作數(shù)據(jù)庫」。流程圖如下所示:

1.線程A發(fā)起一個寫操作,第一步del cache

2.線程A第二步寫入新數(shù)據(jù)到DB

3.線程B發(fā)起一個讀操作,cache miss緩存失效了。

4.線程B從DB獲取最新數(shù)據(jù)

5.線程B執(zhí)行set cache,把從DB讀到的數(shù)據(jù),更新到緩存。

「這樣看,沒啥問題」。

1.線程A發(fā)起一個寫操作,第一步del cache

2.此時線程B發(fā)起一個讀操作,cache miss

3.線程B繼續(xù)讀DB,讀出來一個老數(shù)據(jù)

4.然后老數(shù)據(jù)設置入cache

5.線程A寫入DB最新的數(shù)據(jù)

OK,醬紫,就有問題了吧,老數(shù)據(jù)入到緩存了,「每次讀都是老數(shù)據(jù)啦,緩存與數(shù)據(jù)與數(shù)據(jù)庫數(shù)據(jù)不一致了」。

緩存維護方案二

上個方案是一讀一寫,如果是雙寫操作,「先操作緩存,在操作數(shù)據(jù)庫」,會怎么樣呢?

1.線程A發(fā)起一個寫操作,第一步set cache

2.線程A第二步寫入新數(shù)據(jù)到DB

3.線程B發(fā)起一個寫操作,set cache

4.線程B第二步寫入新數(shù)據(jù)到DB

「這樣看,也沒啥問題?!?/p>

1.線程A發(fā)起一個寫操作,第一步set cache

2.線程B發(fā)起一個寫操作,第一步set cache

3.線程B寫入數(shù)據(jù)庫到DB

4.線程A寫入數(shù)據(jù)庫到DB

執(zhí)行完后,緩存保存的是B操作后的數(shù)據(jù),數(shù)據(jù)庫是A操作后的數(shù)據(jù),「緩存和數(shù)據(jù)庫數(shù)據(jù)不一致了」。

緩存維護方案三

一寫(線程A)一讀(線程B)操作,「先操作數(shù)據(jù)庫,再操作緩存」。

1.線程A發(fā)起一個寫操作,第一步write DB

2.線程A第二步del cache

3.線程B發(fā)起一個讀操作,cache miss

4.線程B從DB獲取最新數(shù)據(jù)

5.線程B同時set cache

有些朋友可能認為,在第2步刪除緩存之前,線程B讀過來呢?這時候,讀到的是緩存老數(shù)據(jù),這個可以認為是正常業(yè)務邏輯呀,下次再讀取就是正確數(shù)據(jù)了。這種方案「沒有明顯的并發(fā)問題」,但是呢,「步驟二刪除緩存失敗」,還是個問題。不過概率比較小,「優(yōu)于方案一和方案二」,平時工作中也是使用方案三。綜上對比,我們一般采用方案三,但是有沒有完美全解決方案三的弊端的方法呢?

緩存維護方案四

這個是方案三的改進方案,都是先操作數(shù)據(jù)庫再操作緩存

通過數(shù)據(jù)庫的「binlog」來「異步淘汰key」,以mysql為例 可以「使用阿里的canal將binlog日志采集發(fā)送到MQ隊列」里面,然后「通過ACK機制 確認處理」這條更新消息,刪除緩存,保證數(shù)據(jù)緩存一致性。但是呢還有個問題,「如果是主從數(shù)據(jù)庫呢」?

緩存維護方案五

主從DB問題:因為主從DB同步存在延時時間。如果刪除緩存之后,數(shù)據(jù)同步到備庫之前已經(jīng)有請求過來時,「會從備庫中讀到臟數(shù)據(jù)」,如何解決呢?

緩存維護總結

綜上所述,在分布式系統(tǒng)中,緩存和數(shù)據(jù)庫同時存在時,如果有寫操作的時候,「先操作數(shù)據(jù)庫,再操作緩存」。如下:

1.讀取緩存中是否有相關數(shù)據(jù)

2.如果緩存中有相關數(shù)據(jù)value,則返回

3.如果緩存中沒有相關數(shù)據(jù),則從數(shù)據(jù)庫讀取相關數(shù)據(jù)放入緩存中key-》value,再返回

4.如果有更新寫數(shù)據(jù),則先操作數(shù)據(jù)庫,再操作緩存

5.為了保證第四步更新緩存成功,使用binlog異步通知操作

6.如果是主從數(shù)據(jù)庫,binglog取自于從庫

7.如果是一主多從,每個從庫都要采集binlog,然后消費端收到最后一臺binlog數(shù)據(jù)才刪除緩存

責任編輯:haq

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

原文標題:并發(fā)環(huán)境下,先操作數(shù)據(jù)庫還是先操作緩存?

文章出處:【微信號:DBDevs,微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    分布式存儲數(shù)據(jù)恢復—虛擬機上hbase和hive數(shù)據(jù)庫數(shù)據(jù)恢復案例

    分布式存儲數(shù)據(jù)恢復環(huán)境: 16臺某品牌R730xd服務器節(jié)點,每臺服務器節(jié)點上有數(shù)臺虛擬機。 虛擬機上部署Hbase和Hive數(shù)據(jù)庫。 分布式存儲故障:
    的頭像 發(fā)表于 04-17 11:05 ?218次閱讀

    深入HarmonyOS NEXT開發(fā)的ArkData操作SQLite數(shù)據(jù)庫

    大家好,我是 V 哥。今天給大家整理的內(nèi)容是關于鴻蒙 NEXT 開發(fā)中使用 ArkData 操作 SQLite 數(shù)據(jù)庫的詳細介紹,從入門到精通,包含案例代碼和注釋,幫助小白快速入門到提升。贊后看,家財萬貫。
    的頭像 發(fā)表于 03-07 10:55 ?448次閱讀

    分布式云化數(shù)據(jù)庫有哪些類型

    分布式云化數(shù)據(jù)庫有哪些類型?分布式云化數(shù)據(jù)庫主要類型包括:關系型分布式數(shù)據(jù)庫、非關系型分布式數(shù)據(jù)庫
    的頭像 發(fā)表于 01-15 09:43 ?480次閱讀

    SqlServer數(shù)據(jù)恢復—SqlServer數(shù)據(jù)庫數(shù)據(jù)恢復案例

    一塊硬盤上存放的SqlServer數(shù)據(jù)庫,windows server操作系統(tǒng)+NTFS文件系統(tǒng)。由于誤操作導致分區(qū)損壞,需要恢復硬盤里的SqlServer
    的頭像 發(fā)表于 01-09 11:15 ?428次閱讀
    SqlServer<b class='flag-5'>數(shù)據(jù)</b>恢復—SqlServer<b class='flag-5'>數(shù)據(jù)庫</b><b class='flag-5'>數(shù)據(jù)</b>恢復案例

    HarmonyOS Next 應用元服務開發(fā)-分布式數(shù)據(jù)對象遷移數(shù)據(jù)文件資產(chǎn)遷移

    提供了async版本供該場景使用。 當前,wantParams“sessionId”字段在遷移流程中被系統(tǒng)占用,建議開發(fā)者在wantParams定義其他key值存儲該分布式
    發(fā)表于 12-24 10:11

    HarmonyOS Next 應用元服務開發(fā)-分布式數(shù)據(jù)對象遷移數(shù)據(jù)權限與基礎數(shù)據(jù)

    提供了async版本供該場景使用。 當前,wantParams“sessionId”字段在遷移流程中被系統(tǒng)占用,建議開發(fā)者在wantParams定義其他key值存儲該分布式
    發(fā)表于 12-24 09:40

    云托管可以操作數(shù)據(jù)庫嗎?安全性如何

    云托管可以操作數(shù)據(jù)庫。在云托管環(huán)境,開發(fā)者可以通過使用云服務提供商提供的API或SDK來連接并操作數(shù)據(jù)庫。云托管提供了多種安全性措施來
    的頭像 發(fā)表于 12-11 13:35 ?358次閱讀

    PingCAP推出TiDB開源分布式數(shù)據(jù)庫

    的性能表現(xiàn)。我們將繼續(xù)堅持開源的創(chuàng)新理念,將TiDB打造成一個領先的數(shù)據(jù)庫產(chǎn)品?!?部署新一代分布式數(shù)據(jù)庫已經(jīng)成為用戶釋放數(shù)據(jù)價值、推動數(shù)字化轉型的重要方式,但隨著數(shù)據(jù)的快速增長以及上
    的頭像 發(fā)表于 11-24 11:26 ?970次閱讀
    PingCAP推出TiDB開源<b class='flag-5'>分布式數(shù)據(jù)庫</b>

    一文講清什么是分布式云化數(shù)據(jù)庫!

    分布式云化數(shù)據(jù)庫是一種先進的數(shù)據(jù)管理系統(tǒng),它將傳統(tǒng)的數(shù)據(jù)庫技術與分布式計算、云計算和大
    的頭像 發(fā)表于 10-14 10:06 ?480次閱讀

    分布式云化數(shù)據(jù)庫的優(yōu)缺點分析

    分布式云化數(shù)據(jù)庫的優(yōu)點主要體現(xiàn)在高可用性和容錯性、可擴展性、體系結構、數(shù)據(jù)一致性、成本、升級迭代等方面。同時也存在一些缺點,如通信開銷較大、數(shù)據(jù)的存取結構復雜、
    的頭像 發(fā)表于 09-14 09:42 ?444次閱讀

    華納云:MySQL初始化操作如何創(chuàng)建新的數(shù)據(jù)庫

    要在MySQL創(chuàng)建一個新的數(shù)據(jù)庫,可以按照以下步驟進行操作: 登錄到MySQL數(shù)據(jù)庫管理系統(tǒng)
    的頭像 發(fā)表于 09-04 14:30 ?549次閱讀

    軟件系統(tǒng)數(shù)據(jù)庫的分庫分表設計

    分布式集群,實現(xiàn)分庫分表功能,解決數(shù)據(jù)庫中海量數(shù)據(jù)存儲和查詢性能的問題。MyCat 還是一個數(shù)據(jù)庫的集群中間件,主要實現(xiàn) RDBMS
    的頭像 發(fā)表于 08-22 11:39 ?589次閱讀
    軟件<b class='flag-5'>系統(tǒng)</b><b class='flag-5'>數(shù)據(jù)庫</b>的分庫分表設計

    基于分布式存儲WDS的金融信創(chuàng)云承載數(shù)據(jù)庫類關鍵應用

    基于分布式存儲WDS的金融信創(chuàng)云承載數(shù)據(jù)庫類關鍵應用
    的頭像 發(fā)表于 08-16 09:42 ?574次閱讀
    基于<b class='flag-5'>分布式</b>存儲WDS的金融信創(chuàng)云承載<b class='flag-5'>數(shù)據(jù)庫</b>類關鍵應用

    基于Openharmony輕量級操作系統(tǒng)分布式數(shù)據(jù)管理開發(fā)案例

    實驗內(nèi)容本例程演示如何在小凌派-RK2206開發(fā)板上使用OpenHarmony輕量級操作系統(tǒng)進行KvStore(即分布式數(shù)據(jù)管理)數(shù)據(jù)讀寫。例程:(1)創(chuàng)建兩個線程,一個負責寫入KvS
    的頭像 發(fā)表于 08-07 08:23 ?1735次閱讀
    基于Openharmony輕量級<b class='flag-5'>操作系統(tǒng)</b>的<b class='flag-5'>分布式</b><b class='flag-5'>數(shù)據(jù)</b>管理開發(fā)案例

    基于Openharmony輕量級操作系統(tǒng)分布式數(shù)據(jù)管理開發(fā)案例

    實驗內(nèi)容 本例程演示如何在小凌派-RK2206開發(fā)板上使用OpenHarmony輕量級操作系統(tǒng)進行KvStore(即分布式數(shù)據(jù)管理)數(shù)據(jù)讀寫。 例程: (1)創(chuàng)建兩個線程,一個負責寫入
    發(fā)表于 08-06 11:56