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

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

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

3天內不再提示

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

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

掃碼添加小助手

加入工程師交流群

前言

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

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

緩存維護方案一

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

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

2.線程A第二步寫入新數據到DB

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

4.線程B從DB獲取最新數據

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

「這樣看,沒啥問題」。

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

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

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

4.然后老數據設置入cache

5.線程A寫入DB最新的數據

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

緩存維護方案二

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

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

2.線程A第二步寫入新數據到DB

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

4.線程B第二步寫入新數據到DB

「這樣看,也沒啥問題。」

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

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

3.線程B寫入數據庫到DB

4.線程A寫入數據庫到DB

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

緩存維護方案三

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

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

2.線程A第二步del cache

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

4.線程B從DB獲取最新數據

5.線程B同時set cache

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

緩存維護方案四

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

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

緩存維護方案五

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

緩存維護總結

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

1.讀取緩存中是否有相關數據

2.如果緩存中有相關數據value,則返回

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

4.如果有更新寫數據,則先操作數據庫,再操作緩存

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

6.如果是主從數據庫,binglog取自于從庫

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

責任編輯:haq

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

    關注

    1

    文章

    246

    瀏覽量

    27182
  • 數據庫
    +關注

    關注

    7

    文章

    3927

    瀏覽量

    66250
  • 分布式系統(tǒng)

    關注

    0

    文章

    147

    瀏覽量

    19633

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

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

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

    分布式云化數據庫有哪些類型

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

    SqlServer數據恢復—SqlServer數據庫數據恢復案例

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

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

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

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

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

    云托管可以操作數據庫嗎?安全性如何

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

    PingCAP推出TiDB開源分布式數據庫

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

    一文講清什么是分布式云化數據庫!

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

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

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

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

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

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

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

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

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

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

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

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

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