日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

两次被裁之后,我终于解决了数据库缓存一致性问题

發布時間:2025/3/16 数据库 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 两次被裁之后,我终于解决了数据库缓存一致性问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我是一名畢業兩年的程序員。

算上實習,工作三年了,正是一個程序員的黃金時代,這讓我普通而自信。

但是從實習期,我就被辭退兩次了。

今天是我的又一場面試,而且是大廠面試。我要一洗前恥,證明自己。

好了,我要趕緊出發,不然通往美好生活的996路公交車又堵了。

經歷過西二旗的人潮人涌之后,我按時來到了面試官面前。

和面試官寒暄了幾句,他直接問了一個技術問題

"如果網站流量太高,我們通常會加緩存來減輕數據庫壓力,讀緩存很簡單,如下圖

關于寫緩存,你知道怎么設計這個方案,保證緩存與數據庫的數據一致性嗎?"

一剎那,往事涌上心頭,因為我在這個問題上,已經栽了兩次了。

?

第一次是在實習期。

那年二十,剛剛工作,每日如嘍啰。

實習的公司是一家外包公司,沒有什么技術規范,按時上線是大家最重要的諾言。

我的第一個任務就是增加緩存,降低Mysql的壓力。

這個任務最核心的就是寫緩存時怎么保證緩存和數據庫的一致性,當年還是實習生的我顯然沒有意識到這個需求的復雜性,直接采用的方案就是

先更新數據庫,再更新緩存

上線第二天,網站就出了Bug,我就被甲方爸爸投訴了。

后來,在復盤中我才發現,網站掛了的原因是:

如果同時有請求A和請求B進行更新操作,那么會出現

請求B是最后請求的,那么應該是他最后更新緩存為正確的數據,但是有可能請求A處理的更慢,所以請求A更新了最后的緩存。

另外這個系統寫數據庫場景比較多,而讀請求比較少,這種方案就導致數據壓根還沒讀到,緩存就被頻繁的更新,浪費性能。

然后我當天就被辭退了,理由是在辦公室工位吃螺螄粉。

?

沒想到啊沒想到,在這個問題上,我還能梅開二度。

畢業之后進入的第一家公司,兢兢業業兩年半,業務量也逐漸上來了。

訪問量上升,代表著我的薪水也有機會上升。我立馬做了個方案,準備在一向不看好我的經理面前表現一把。

核心邏輯就是采用

先刪緩存,再更新數據庫

經理看完方案,直接畫了下面一個圖

淡淡說道:"這樣的話,緩存都是臟數據了。"

我想了下,說:"確實,不過可以雙刪緩存。"

public?void?write(String?key,Object?data){redis.delKey(key);?//?刪緩存db.updateData(data);?//更新數據庫Thread.sleep(1000);?//?根據業務執行時間確定具體的時間redis.delKey(key);?//?我再刪緩存}

經理笑了笑,說:"我們可是采用了MySQL讀寫分離架構啊,如果有下面這樣兩個請求

還是會導致數據不一致啊!"

我有點不悅,這可是我主動加班做的方案,一句贊賞都沒有,怎么老是被質疑?

但還是回答道 "那就sleep時間修改為業務執行時間+主從同步時間就可以了,就是等主從同步完了再刪一次。"

經理又問道:"嗯,可以。不過你這樣刪除緩存兩次,會造成吞吐量降低,怎么辦?"

我覺得很不爽了,又不是他開發。

算了,我回應到:"那就將第二次刪除改為異步的。即重新起一個線程,異步刪除。"

經理又問道:"那要是第二次刪除緩存失敗呢?"

我無奈了:"您說呢,畢竟您也是經理,要不您也說兩個方案讓我學習一下?"

經理笑了笑:"年輕人,路走窄了啊!"

然后我當天就被辭退了,理由是我代碼縮進用的Tab而非空格。

?

此刻,我坐在面試官前面,面對這個問題已經有三年了,我也早已胸有成竹。

想到這,我直接站了起來,走到白板面前,說道:"實不相瞞,前兩次我的離職都和這個問題有關,所以我也思考了很多,不如直接我就講講最優解法。那就是

先更新數據庫,再刪緩存

當然,這樣也會有并發問題,比如

但是數據庫讀操作速度遠快于寫操作,所以存在臟數據的可能性為0。

當然如果您問,如果真的存在怎么辦?

簡單,雙刪就行了,即第一次刪除緩存之后,等待一段時間重新再刪一次。

當然您如果還問,刪除緩存失敗了怎么辦,解決方法如下

即引入消息隊列,刪除緩存失敗的記錄下來重復刪除,直到成功方可。如此一來,萬無一失。"

面試官點了點頭,鼓了鼓掌,嘆到:"優秀,不過我好奇你前兩次的離職,可以和我講講嗎?"

面試官聽完我的經歷之后,對我深表同情,問道:"假如我給了你offer,你走到之前那些開除你的人面前,你會說什么呢?"

我走到窗戶旁邊,望向遠方,輕聲道:"我會走到他們面前,把offer甩給他們看,告訴他們,我等了三年,就是要等一個機會,我要爭一口氣,不是想證明我了不起,我只是要告訴人家,我失去的東西一定要拿回來!"


參考資料?

https://www.cnblogs.com/rjzheng/p/9041659.html

有道無術,術可成;有術無道,止于術

歡迎大家關注Java之道公眾號

好文章,我在看??

總結

以上是生活随笔為你收集整理的两次被裁之后,我终于解决了数据库缓存一致性问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。