国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

    文章

    248

    瀏覽量

    27760
  • 數據庫
    +關注

    關注

    7

    文章

    4019

    瀏覽量

    68337
  • 分布式系統
    +關注

    關注

    0

    文章

    152

    瀏覽量

    19885

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    TiDB分布式數據庫運維實踐

    TiDB 是 PingCAP 開發的開源分布式關系型數據庫,兼容 MySQL 5.7 協議,底層存儲基于 TiKV(分布式 KV 存儲)和 RocksDB。它解決的核心問題是:當單機 MySQL 無法承載
    的頭像 發表于 03-04 15:44 ?55次閱讀

    分布式數據恢復—Ceph+TiDB數據恢復報告

    無法正常訪問。目標需要恢復的RBD卷存儲了一臺虛擬機的完整磁盤鏡像,該虛擬機內部運行TiDB分布式數據庫系統,包含重要的業務數據
    的頭像 發表于 02-03 17:22 ?81次閱讀
    <b class='flag-5'>分布式</b><b class='flag-5'>數據</b>恢復—Ceph+TiDB<b class='flag-5'>數據</b>恢復報告

    蜂鳥自定義指令軟件講解和內聯匯編(一)

    具體使用的寄存器索引(譬如到底是 x1 還是 x2 等),編譯器會根據引號中指定的操作數約束,按照編譯優化的原則來分配合理的寄存器索引號。程序員僅需要關心操作數和變量的映射,無須關心操作數
    發表于 10-24 10:51

    【節能學院】Acrel-1000DP分布式光伏監控系統在奉賢平高食品 4.4MW 分布式光伏應用

    摘要:在“雙碳”和新型電力系統建設背景下,分布式光伏接入比例不斷提高,對配電網電壓、調度運行及調峰等環節造成強烈沖擊。本文設計包含平臺層、設備層二層架構體系的分布式光伏管控平臺,以及小容量工商業
    的頭像 發表于 08-23 08:04 ?3490次閱讀
    【節能學院】Acrel-1000DP<b class='flag-5'>分布式</b>光伏監控<b class='flag-5'>系統</b>在奉賢平高食品 4.4MW <b class='flag-5'>分布式</b>光伏<b class='flag-5'>中</b>應用

    分布式光伏發電監測系統技術方案

    分布式光伏發電監測系統技術方案 柏峰【BF-GFQX】一、系統目標 :分布式光伏發電監測系統旨在通過智能化的監測手段,實現對
    的頭像 發表于 08-22 10:51 ?3194次閱讀
    <b class='flag-5'>分布式</b>光伏發電監測<b class='flag-5'>系統</b>技術方案

    一鍵部署無損網絡:EasyRoCE助力分布式存儲效能革命

    分布式存儲的性能瓶頸往往在于網絡。如何構建一個高帶寬、超低時延、零丟包的無損網絡,是釋放分布式存儲全部潛力、賦能企業關鍵業務(如實時數據庫、AI訓練、高性能計算)的關鍵挑戰。
    的頭像 發表于 08-04 11:34 ?1615次閱讀
    一鍵部署無損網絡:EasyRoCE助力<b class='flag-5'>分布式</b>存儲效能革命

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

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

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

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

    SQLSERVER數據庫是什么

    支持在Linux和容器化環境運行。 核心特點 關系型數據庫 基于SQL(結構化查詢語言)進行數據操作,支持表、行、列等結構化存儲。 提供ACID(原子性、一致性、隔離性、持久性)事務
    的頭像 發表于 05-26 09:19 ?1168次閱讀

    MySQL數據庫是什么

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

    多通道電源管理芯片在分布式能源系統的優化策略

    摘要: 隨著分布式能源系統的廣泛應用,對電源管理芯片的性能要求日益提升。本文深入探討了多通道電源管理芯片在分布式能源系統的優化策略,以國科
    的頭像 發表于 05-16 15:22 ?894次閱讀

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

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

    不用編程不用聯網,PLC和儀表直接對SQL接數據庫,有異常時還可先將數據緩存

    查詢數據后寫入PLC。 數據緩存演示:*附件:視頻文件.rar 相關軟件和配置案例:*附件:PLC儀表對接數據庫.rar
    發表于 04-12 10:47

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

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

    深入HarmonyOS NEXT開發的ArkData操作SQLite數據庫

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