快取穿透 快取擊穿 快取雪崩及其解決方案

2022-07-19 06:45:09 字數 1034 閱讀 2095

設計乙個快取系統,不得不要考慮的問題就是:快取穿透、快取擊穿與失效時的雪崩效應。

1.快取穿透

快取穿透是指查詢乙個一定不存在的資料,因為快取中也無該資料的資訊,則會直接去資料庫層進行查詢,從系統層面來看像是穿透了快取層直接達到db,從而稱為快取穿透,沒有了快取層的保護,這種查詢一定不存在的資料對系統來說可能是一種危險,如果有人惡意用這種一定不存在的資料來頻繁請求系統(準確的說是攻擊系統),請求都會到達資料庫層導致db癱瘓從而引起系統故障。

解決方案

在快取使用的場景中,快取key值失效的風暴(單個key值失效,put時間較長,導致穿透快取落到db上,對db造成壓力)。可以採用 布隆過濾器 、單獨設定個快取區域儲存空值,對要查詢的key進行預先校驗 、快取降級等方法。

快取穿透業內的解決方案已經比較成熟,主要常用的有以下幾種:

2.快取雪崩

在普通的快取系統中一般例如redis、memcache等中,我們會給快取設定乙個失效時間,但是如果所有的快取的失效時間相同,那麼在同一時間失效時,所有系統的請求都會傳送到資料庫層,db可能無法承受如此大的壓力導致系統崩潰。

解決方案

加鎖排隊、 設定過期標誌更新快取 、 設定過期標誌更新快取 、二級快取(引入一致性問題)、 預熱、 快取與服務降級

3.快取擊穿

快取擊穿實際上是快取雪崩的乙個特例,快取擊穿是指快取中沒有但資料庫中有的資料(一般是快取時間到期),這時由於併發使用者特別多,同時讀快取沒讀到資料,又同時去資料庫去取資料,引起資料庫壓力瞬間增大,造成過大壓力。擊穿與雪崩的區別即在於擊穿是對於某一特定的熱點資料來說,而雪崩是全部資料

解決方案

-雙重校驗(dubbo check)類似執行緒安全的懶漢單例模式實現,保證只會有乙個執行緒去訪問資料庫

針對業務系統,永遠都是具體情況具體分析,沒有最好,只有最合適。

最後,對於快取系統常見的快取滿了和資料丟失問題,需要根據具體業務分析,通常我們採用lru策略處理溢位,redis的rdb和aof持久化策略來保證一定情況下的資料安全。

參考:

快取穿透 快取擊穿 快取雪崩

一 快取處理流程 前台請求,後台先從快取中取資料,取到直接返回結果,取不到時從資料庫中取,資料庫取到更新快取,並返回結果,資料庫也沒取到,那直接返回空結果。二 快取穿透 描述 快取穿透是指快取和資料庫中都沒有的資料,而使用者不斷發起請求,如發起為id為 1 的資料或id為特別大不存在的資料。這時的使...

快取穿透,快取擊穿,快取雪崩

所謂的快取穿透,簡單來講就是查詢某些不存在的key時,快取和資料庫查詢結果都為空,而空的結果又不被快取起來,而導致每次查詢都去請求資料庫層的情況。在流量大時,可能db就掛掉了,要是有人利用不存在的key頻繁攻擊我們的應用,這就是漏洞。過程 快取不命中,進而導致每次查詢都去查詢資料庫,快取也就失去了作...

快取穿透快取擊穿快取雪崩

1 快取穿透 1.1 什麼是快取穿透 快取穿透,是指查詢乙個資料庫一定不存在的資料 核心 快取和資料庫該值不存在 正常的使用快取流程大致是,資料查詢先進行快取查詢,如果key不存在或者key已經過期,再對資料庫進行查詢,並把查詢到的物件,放進快取。如果資料庫查詢物件為空,則不放進快取。1.2 帶來的...