色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

分布式系統中先操作數據庫還是先操作緩存

數據分析與開發 ? 來源:撿田螺的小男孩 ? 作者:撿田螺的小男孩 ? 2021-09-30 14:46 ? 次閱讀

前言

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

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

緩存維護方案一

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

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

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

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

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

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

「這樣看,沒啥問題」。

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

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

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

4.然后老數據設置入cache

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

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

緩存維護方案二

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

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

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

3.線程B發起一個寫操作,set cache

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

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

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

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

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

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

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

緩存維護方案三

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

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

2.線程A第二步del cache

3.線程B發起一個讀操作,cache miss

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

5.線程B同時set cache

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

緩存維護方案四

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

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

緩存維護方案五

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

緩存維護總結

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

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

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

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

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

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

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

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

責任編輯:haq

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

    關注

    1

    文章

    240

    瀏覽量

    26701
  • 數據庫
    +關注

    關注

    7

    文章

    3827

    瀏覽量

    64514
  • 分布式系統
    +關注

    關注

    0

    文章

    146

    瀏覽量

    19276

原文標題:并發環境下,先操作數據庫還是先操作緩存?

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

收藏 人收藏

    評論

    相關推薦

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

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

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

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

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

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

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

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

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

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

    分布式云化數據庫的優缺點分析

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

    華納云:MySQL初始化操作如何創建新的數據庫

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

    軟件系統數據庫的分庫分表設計

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

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

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

    基于Openharmony輕量級操作系統分布式數據管理開發案例

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

    基于Openharmony輕量級操作系統分布式數據管理開發案例

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

    Memcached介紹和詳解

    ,Memcached可以顯著減輕后端數據庫和Web服務器的負載。 Memcached作為一個高性能的內存緩存系統,通過緩存經常訪問的數據來提
    發表于 07-17 15:58

    探討篇(四):分布式數據訪問解決方案

    背景 如果數據在同一個服務的同一個數據庫,通過SQL即可查詢相對比較簡單,但當數據分布到不同服務不同的數據庫
    的頭像 發表于 07-12 15:19 ?375次閱讀
    探討篇(四):<b class='flag-5'>分布式</b><b class='flag-5'>數據</b>訪問解決方案

    鴻蒙開發接口數據管理:【@ohos.data.distributedData (分布式數據管理)】

    分布式數據管理為應用程序提供不同設備間數據庫分布式協同能力。通過調用分布式數據各個接口,應用程
    的頭像 發表于 06-07 09:30 ?1023次閱讀
    鴻蒙開發接口<b class='flag-5'>數據</b>管理:【@ohos.data.distributedData (<b class='flag-5'>分布式</b><b class='flag-5'>數據</b>管理)】

    鴻蒙HarmonyOS開發實例:【分布式關系型數據庫

    使用[@ohos.data.relationalStore]接口和[@ohos.distributedDeviceManager]?接口展示了在eTS中分布式關系型數據庫的使用,在增、刪、改、查的基本操作外,還包括
    的頭像 發表于 04-11 09:52 ?960次閱讀
    鴻蒙HarmonyOS開發實例:【<b class='flag-5'>分布式</b>關系型<b class='flag-5'>數據庫</b>】
    主站蜘蛛池模板: 久久人妻少妇嫩草AV蜜桃99| 哇嘎在线精品视频在线观看| 补课H湿 1V1 PLAY| 第七色 夜夜撸| 国产婷婷色综合AV蜜臀AV| 久久婷婷色一区二区三区| 亚洲国产日韩欧美在线a乱码 | 国产精品第3页| 久久久久久久久久久福利观看| 热久久2018亚洲欧美| 亚洲色播永久网址大全| www黄色大片| 久久久久久免费高清电影| 亚洲风情无码免费视频| couo福利姬图库| 久久精品一区二区免费看| 亚洲中字慕日产2020| 丰满的大白屁股ass| 美女大本营| 野花日本完整版在线观看免费高清| 好吊射视频988gaocom| 三级黄色高清视频| 97在线精品视频| 交换邻居波多野结衣中文字幕| 日本妈妈JMZZZZZ| 99久久久无码国产精品不卡按摩| 狠狠干狠狠色| 在线 国产 欧美 亚洲 天堂| 国产伦精品一区二区三区免费| 女教师跟黑人男朋友激情过后| 伊人久久中文字幕久久cm| 国产亚洲精品久久久久久禁果TV| 亚洲国产货青视觉盛宴| 久久re6热在线视频精品| 香蕉免费高清完整| 国产精品 中文字幕 亚洲 欧美| 无敌在线视频观看免费| 久久精品免费电影| 办公室日本肉丝OL在线| 欧美片第1页 综合| 99re久久热在这里精品|