你需要知道的快取擊穿 穿透 雪崩

2022-01-10 09:09:30 字數 1680 閱讀 5524

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

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

在高併發下,多執行緒同時查詢同乙個資源,如果快取中沒有這個資源,那麼這些執行緒都會去後端服務或資料庫查詢,對資料庫造成極大壓力,快取也就失去存在的意義。

快取擊穿解決方案

導致快取擊穿的問題在於高併發多執行緒情景下,許多請求一下子都到後端服務和資料庫,導致後端服務與資料庫的壓力驟增。

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

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

快取穿透解決方案

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

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

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

布隆過濾器(bloom filter)是2023年由布隆提出的。它實際上是乙個很長的二進位制向量和一系列隨機對映函式。布隆過濾器可以用於檢索乙個元素是否在乙個集合中。它的優點是空間效率和查詢時間都遠遠超過一般的演算法,缺點是有一定的誤識別率和刪除困難

如果想要判斷乙個元素是不是在乙個集合裡,一般想到的是將所有元素儲存起來,然後通過比較確定。鍊錶,樹等等資料結構都是這種思路. 但是隨著集合中元素的增加,我們需要的儲存空間越來越大,檢索速度也越來越慢(o(n),o(logn))。不過世界上還有一種叫作雜湊表(又叫雜湊表,hash table)的資料結構。它可以通過乙個hash函式將乙個元素對映成乙個位陣列(bit array)中的乙個點。這樣一來,我們只要看看這個點是不是1就可以知道集合中有沒有它了。這就是布隆過濾器的基本思想。

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

快取雪崩解決方案

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

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

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

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

contact me: [email protected]

快取雪崩 擊穿 穿透

1 快取雪崩 是指在某乙個時間段,快取集中過期失效,或者是快取宕機,所有請求全部打到db上。應對辦法 分散快取過期時間,具體做法是分別設定不同的快取時間,比如加上隨機因子。2 快取擊穿 當某個熱點key失效時,高併發直接請求資料庫對資料庫伺服器造成壓垮性的壓力,比如爆款商品。應對辦法 1 熱點資料永...

快取雪崩 擊穿 穿透

快取擊穿 快取穿透 在同一時間快取資料集體失效,此時大量請求訪問失效資料,導致大量併發直接訪問資料庫造成資料庫壓力 將需要快取的資料進行分散失效處理,將快取的資料的失效時間設定乙個隨機值,避免大量快取資料在同一時間集體失效 將部分經常做查詢且不經常更新的資料的快取時間設定為永不失效 對於統一個key...

redis 快取擊穿 穿透 雪崩

一般的快取系統,都是按照key去快取查詢,如果不存在對應的value,就去後端系統查詢 比如db 一些惡意的請求會故意查詢不存在的key,請求量很大,就會對後端系統造成很大的壓力。這就叫做快取穿透。如何避免?1 對查詢結果為空的情況也進行快取,這樣,再次訪問時,快取層會直接返回空值。快取時間設定短一...