當前位置:
首頁 > 知識 > 你需要知道的緩存擊穿 穿透 雪崩

你需要知道的緩存擊穿 穿透 雪崩

緩存擊穿/穿透/雪崩

Intro

使用緩存需要了解幾個緩存問題,緩存擊穿、緩存穿透以及緩存雪崩,需要了解它們產生的原因以及怎麼避免,尤其是當你打算設計自己的緩存框架的時候需要考慮如何處理這些問題。

緩存擊穿

一般的緩存系統,都是按照 key 去緩存查詢,如果不存在對應的 value ,就應該去後端系統查找(比如資料庫)。如果 key 對應的 value 是一定不存在的,並且對該 key 並發請求量很大,就會對後端系統就會造成很大的壓力。

在高並發下,多線程同時查詢同一個資源,如果緩存中沒有這個資源,那麼這些線程都會去後端服務或資料庫查找,對資料庫造成極大壓力,緩存也就失去存在的意義。

緩存擊穿解決方案

導致緩存擊穿的問題在於高並發多線程情景下,許多請求一下子都到後端服務和資料庫,導致後端服務與資料庫的壓力驟增。

處理這個問題,在多線程請求同一個 key 的時候,進行排隊,這樣第一次請求後端服務和資料庫之後更新緩存的值,下一個請求從緩存中取數據的時候就會拿到緩存數據,不會再請求後端服務和資料庫。

緩存穿透

緩存穿透是指用戶查詢數據,在資料庫沒有,自然在緩存中也不會有。這樣就導致用戶查詢的時候,在緩存中找不到,每次都要去資料庫中查詢,從而失去了緩存的意義而且相比直接查詢資料庫還增加了每次都去查緩存。

緩存穿透解決方案

導致問題出現的原因在於請求一個不存在的數據從而使得緩存始終不存在進而導致後端系統(主要是資料庫)要承受很大的壓力,所以想要解決這個問題,就勢必就在緩存這裡攔截住大量的請求,使得最終走到後端系統,查詢資料庫的請求儘可能的少。

一般處理這個問題,緩存不存在的時候會在緩存中設置一個時間較短的內容為空的緩存,從而減少實際請求到後端和進行資料庫查詢的次數。

複雜一些的解決方案有 布隆過濾器,基本原理是設置一個 list,查詢緩存的時候從 list 里進行判斷,這裡不做多介紹。

緩存雪崩

當緩存伺服器重啟或者大量緩存集中在某一個時間失效,這樣在失效的時候,也會給後端系統和資料庫帶來很大壓力.

緩存雪崩解決方案

導致出現緩存雪崩的根本原因在於緩存大量失效,從而導致大量請求沒有命中緩存,大量請求走到後端服務和資料庫,造成壓力。

如果系統啟動就依賴很多緩存,那可以通過其它服務進行緩存預熱,提前把需要的數據放到緩存中,避免系統啟動大量請求直接請求到後端服務和資料庫。

既然是由於同一時間緩存大量失效,我們也可以著手從緩存的失效時間上,做一些優化,讓緩存不要在同一時間點失效。

具體的實施辦法,你可以在設置失效時間的時候隨機加幾秒過期時間,避免同一時間點緩存大量失效。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 千鋒JAVA開發學院 的精彩文章:

面試必問:讀寫一致性,你需要思考的問題
MariaDB10.3 系統版本表 有效防止數據丟失

TAG:千鋒JAVA開發學院 |