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

    文章

    248

    瀏覽量

    27635
  • 數據庫
    +關注

    關注

    7

    文章

    3992

    瀏覽量

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

    關注

    0

    文章

    150

    瀏覽量

    19814

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    EtherCAT科普系列(15):EtherCAT技術在分布式測控系統(tǒng)領域應用

    分布式測控系統(tǒng)即集散控制系統(tǒng),是一種以控制器和現(xiàn)場設備為基礎,將相關工藝信號匯集到系統(tǒng),并由操作
    的頭像 發(fā)表于 07-08 11:17 ?898次閱讀
    EtherCAT科普系列(15):EtherCAT技術在<b class='flag-5'>分布式</b>測控<b class='flag-5'>系統(tǒng)</b>領域應用

    數據庫數據恢復—MongoDB數據庫文件丟失的數據恢復案例

    MongoDB數據庫數據恢復環(huán)境: 一臺操作系統(tǒng)為Windows Server的虛擬機上部署MongoDB數據庫。 MongoDB數據庫
    的頭像 發(fā)表于 07-01 11:13 ?443次閱讀
    <b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復—MongoDB<b class='flag-5'>數據庫</b>文件丟失的<b class='flag-5'>數據</b>恢復案例

    MySQL數據庫是什么

    MySQL數據庫是一種 開源的關系型數據庫管理系統(tǒng)(RDBMS) ,由瑞典MySQL AB公司開發(fā),后被Oracle公司收購。它通過結構化查詢語言(SQL)進行數據存儲、管理和
    的頭像 發(fā)表于 05-23 09:18 ?897次閱讀

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

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

    數據庫數據恢復——MongoDB數據庫文件拷貝后服務無法啟動的數據恢復

    MongoDB數據庫數據恢復環(huán)境: 一臺Windows Server操作系統(tǒng)虛擬機上部署MongoDB數據庫。 MongoDB數據庫
    的頭像 發(fā)表于 04-09 11:34 ?644次閱讀
    <b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復——MongoDB<b class='flag-5'>數據庫</b>文件拷貝后服務無法啟動的<b class='flag-5'>數據</b>恢復

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

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

    【「鴻蒙操作系統(tǒng)設計原理與架構」閱讀體驗】02-華為鴻蒙設計理念

    了一個全局一致的訪問視圖,就像所有設備共享了一個巨大的文件,用戶可以隨時隨地訪問自己需要的文件 。 在實際應用,分布式文件系統(tǒng)的高性能和低延時特性也得到了充分體現(xiàn)。當你在電腦上編輯
    發(fā)表于 02-23 16:16

    服務器數據恢復—linux操作系統(tǒng)云服務器數據恢復案例

    某ECS網站服務器,linux操作系統(tǒng)+mysql數據庫。mysql數據庫采用innodb作為默認存儲引擎。 在執(zhí)行數據庫版本更新測試時,操作
    的頭像 發(fā)表于 02-10 18:00 ?609次閱讀
    服務器<b class='flag-5'>數據</b>恢復—linux<b class='flag-5'>操作系統(tǒng)</b>云服務器<b class='flag-5'>數據</b>恢復案例

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

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

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

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

    基于ptp的分布式系統(tǒng)設計

    在現(xiàn)代分布式系統(tǒng),精確的時間同步對于確保數據一致性、系統(tǒng)穩(wěn)定性和性能至關重要。PTP(Precision Time Protocol)是一
    的頭像 發(fā)表于 12-29 10:09 ?953次閱讀

    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 ?549次閱讀

    數據庫數據恢復—MYSQL數據庫ibdata1文件損壞的數據恢復案例

    mysql數據庫故障: mysql數據庫文件ibdata1、MYI、MYD損壞。 故障表現(xiàn):1、數據庫無法進行查詢等操作;2、使用mysqlcheck和myisamchk無法修復
    的頭像 發(fā)表于 12-09 11:05 ?1041次閱讀