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

2022-05-04 09:33:09 字數 752 閱讀 3607

當查詢一條資料,該資料不存在快取和資料庫的時候,每次請求都會請求到資料庫。這種現象就叫快取穿透

當乙個人拿乙個並不存在的 id 一直查詢,就會產生大量的請求到資料庫查詢,資料庫就可以因為壓力過大而崩掉。

解決辦法:

1)、可以為這些查詢不到的 id 在快取中設定為 key,值設定為 null,這樣就可以直接從快取中拿到不需要請求資料庫;

2)、用乙個布隆過濾,如果不存在布隆過濾中,說明肯定肯定不存在於快取和資料庫中。

優缺點:第一種解決方法,如果是攻擊的時候用大量不存在的 id 去請求,可能在快取中產生大量的 key 和 值 null,可能會不太適合。第二種方案可以直接過濾掉不存在的 id,這樣對快取的壓力不大。

在高併發系統中,大量的請求同時查詢乙個 key 時,而這個 key 正好失效,就會導致大量的請求都到資料庫。這種現象就叫快取擊穿

可能會造成資料庫請求量過大,壓力增大。

解決辦法:高併發是多執行緒同時去請求,可以在第乙個查詢資料的請求上使用乙個互斥鎖,其他執行緒到達快取就等待。等第乙個執行緒查詢到資料,快取到快取工具裡,然後第二個執行緒就可以拿到資料了。

某一時刻發生大規模的快取失效的情況,比如快取伺服器停電,宕機等。此時請求就會大量到資料庫。這種現象就叫快取雪崩

解決辦法:使用集群快取,分布式架構。並且使用 hystrix 限流&降級,當發生很多失敗的請求時,就對請求限流或者降級。開啟快取持久化機制,盡快恢復快取集群。

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

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

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

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

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

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