快取穿透 擊穿 雪崩快取場景分析及解決方案

2021-10-01 10:57:32 字數 858 閱讀 2822

由於 csdn 改版之後導致頁面丟失了太多的東西,現已將部落格遷移到自己的小站去了:

現象:每次請求直接穿過快取層,直接會員到資料庫中,給資料庫帶來了巨大的壓力,嚴重甚至會導致宕機,出現嚴重的生產事故

原因:訪問資料會先訪問快取,如果資料不存在快取中才會查詢資料庫,但是如果查詢資料也查詢不出來資料,也就是說當前訪問資料永遠不會寫入快取中,這樣就導致了訪問一定不存在的資料,就相當於快取層形同虛設,每次請求都會到db,造成資料庫壓力過大

解決方案:

現象:當某一 key 失效時,造成大量請求到 db 層,擊垮儲存層

原因:為了保證快取資料的有效性,通常會設定乙個失效時間,如果是熱點 key ,高併發時會有海量請求直接越過快取層到資料庫,這樣就會給資料庫趙成很大的負擔,嚴重可能會導致宕機

解決方案:

現象:多個key失效,造成大量請求到 db層,導致 db 層負擔過重甚至宕機

原因:快取雪崩是指在設定快取的時候設定了同樣的過期時間,導致快取統一時間失效,失效後全部請求就**到了資料庫,造成資料庫一瞬間壓力過大而導致資料庫崩潰。

解決方案:

一般出現這幾種問題都是系統設計的問題,如果設計得合理的話幾乎不會出現這些問題。

快取穿透強調是獲取本不存在的快取資料,請求必然會越過快取層直接到達快取層,很明顯這是利用業務規則的漏洞會系統發起攻擊,解決方案的核心原則是過濾這些非法業務請求,與是否是熱點資料、快取失效時間等因素沒有關係。

快取擊穿強調的是熱點 key 的失效,導致某一時刻大量請求會直接到 db 層,解決方案的核心原則是規避資料庫的併發操作。

快取雪崩強調的多個 key 的解決失效,與 key 是否是熱點資料並不是必然的因素,解決方案的核心原則則是讓 key 之間的失效時間分布更加均勻,避免集體失效的情況

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

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

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

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

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

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