成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

究竟先操作緩存,還是數據庫?

開發 開發工具 前端
緩存存儲,也是數據的冗余,這些,是緩存的核心讀加速原理。 但是,一旦沒有命中緩存,或者一旦涉及寫操作,流程會比沒有緩存更加復雜,這些是今天要分享的話題。

緩存存儲,也是數據的冗余。

  • 數據庫訪問數據,磁盤IO,慢;
  • 緩存里訪問數據,存操作,快;
  • 數據庫里的熱數據,可在緩存冗余一份;
  • 先訪問緩存,如果***,能大大的提升訪問速度,降低數據庫壓力;

這些,是緩存的核心讀加速原理。

但是,一旦沒有***緩存,或者一旦涉及寫操作,流程會比沒有緩存更加復雜,這些是今天要分享的話題。

[[236513]]

讀操作,如果沒有***緩存,流程是怎么樣的?

答:如下圖所示

  • 嘗試從緩存get數據,結果沒有***;
  • 從數據庫獲取數據,讀從庫,讀寫分離;
  • 把數據set到緩存,未來能夠***緩存;

讀操作的流程應該沒有歧義。

寫操作,流程是怎么樣的?

答:寫操作,既要操作數據庫中的數據,又要操作緩存里的數據。

這里,有兩個方案:

  • 先操作數據庫,再操作緩存;
  • 先操作緩存,再操作數據庫;

并且,希望保證兩個操作的原子性,要么同時成功,要么同時失敗。

這演變為一個分布式事務的問題,保證原子性十分困難,很有可能出現一半成功,一半失敗,接下來看下,當原子性被破壞的時候,分別會發生什么。

一、先操作數據庫,再操作緩存

如上圖,正常情況下:

  • 先操作數據庫,成功;
  • 再操作緩存(delete或者set),也成功;

但如果這兩個動作原子性被破壞:***步成功,第二步失敗,會導致,數據庫里是新數據,而緩存里是舊數據,業務無法接受。

畫外音:如果***步就失敗,可以返回調用方50X,不會出現數據不一致。

二、先操作緩存,再操作數據庫

如上圖,正常情況下:

  • 先操作緩存(delete或者set),成功;
  • 再操作數據庫,也成功;

畫外音:如果***步就失敗,也可以返回調用方50X,不會出現數據不一致。

如果原子性被破壞,會發生什么呢?

這里又分了兩種情況:

  • 操作緩存使用set
  • 操作緩存使用delete

使用set的情況:***步成功,第二步失敗,會導致,緩存里是set后的數據,數據庫里是之前的數據,數據不一致,業務無法接受。

并且,一般來說,數據最終以數據庫為準,寫緩存成功,其實并不算成功。

使用delete的情況:***步成功,第二步失敗,會導致,緩存里沒有數據,數據庫里是之前的數據,數據沒有不一致,對業務無影響。只是下一次讀取,會多一次cache miss。

畫外音:此時可以返回調用方50X。

最終,先操作緩存,還是先操作數據庫?

答:

(1) 讀請求,先讀緩存,如果沒有***,讀數據庫,再set回緩存

(2) 寫請求

  • 先緩存,再數據庫
  • 緩存,使用delete,而不是set

畫外音:《緩存,究竟是淘汰,還是修改?》也提到了,淘汰緩存還是修改緩存的建議。

希望大家有收獲,有不同方案歡迎討論。

末了,挖個坑:

在緩存讀取流程中,如果主從沒有同步完成,步驟二讀取到一個舊數據,可能導致緩存里set一個舊數據,最終導致數據庫和緩存數據不一致。

【本文為51CTO專欄作者“58沈劍”原創稿件,轉載請聯系原作者】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2023-12-27 13:44:00

數據庫系統分布式

2021-03-19 07:40:22

緩存數據庫日志

2021-01-29 10:51:48

高并發數據庫緩存

2021-01-13 05:23:27

緩存數據庫高并發

2019-12-24 09:12:10

運維架構技術

2025-06-12 09:16:54

2024-12-16 08:01:57

2020-09-04 06:32:08

緩存數據庫接口

2018-07-05 16:15:26

緩存數據cache miss

2018-07-15 08:18:44

緩存數據庫數據

2018-07-14 21:59:57

緩存數據庫數據

2019-07-11 08:45:00

MySQL數據庫緩存

2018-03-28 09:26:43

數據庫緩存層優化

2010-09-27 14:54:38

SQL數據庫

2010-08-31 16:53:54

DHCP數據庫

2011-09-21 14:06:16

數據庫MongoDB

2009-07-31 09:57:47

ASP.NET數據庫緩

2009-12-22 17:24:22

ADO.NET數據庫

2021-02-05 10:58:28

數據存儲架構

2024-05-08 08:37:44

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美成人精品激情在线观看 | 国产精品久久久久久妇女6080 | 午夜丁香视频在线观看 | 欧洲一区二区三区 | 皇色视频在线 | 一区二区三区国产精品 | www.久久| 久久精品aaa | 蜜臀久久99精品久久久久久宅男 | 一区二区三区国产好的精 | 久久亚洲欧美日韩精品专区 | 久久精品二区亚洲w码 | 岛国av一区二区 | 亚洲国产精品99久久久久久久久 | 国产精品久久久久无码av | 亚洲综合大片69999 | 九九视频在线观看 | 国产精品毛片一区二区三区 | 亚洲精品一区二区三区 | 日韩视频专区 | 欧美成人影院在线 | 国产在线二区 | 久久精品这里 | 国产日韩欧美综合 | 久久精品视频网站 | 精彩视频一区二区三区 | 成人av片在线观看 | 狠狠av | 日韩欧美综合在线视频 | 日韩中文字幕一区 | 中文字幕亚洲国产 | 中文字幕二区三区 | 国产欧美久久精品 | 日韩国产欧美 | 欧美日韩一区二区视频在线观看 | 亚洲精品久久久久久久久久久 | 91大神在线看 | 日韩成人精品一区二区三区 | 九九在线视频 | 国产精品久久久久无码av | 国产91中文 |