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

2021-09-22 10:33:22 字數 832 閱讀 8072

1 快取穿透

1.1 什麼是快取穿透

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

1.2 帶來的問題

對於不存在的id 的資料,如果有大量的請求執行,會導致資料庫壓力過大宕機。

1.3 解決方法

1.3.1在快取中設定id的值空值(如果快取中的資料key值和value都是動態的,要有更新策略,比如設定空值的儲存時間),快取中取到空值返回,不用再去訪問資料庫

1.3.2儲存快取中的key 值(可以考慮使用bloomfilter),判斷請求的key值是否存在,不存在的話都不用訪問快取的資料了

2 快取擊穿

2.1 什麼是快取擊穿

其實就是快取穿透帶來的問題,大量的請求訪問快取乙個key 值,在乙個時間點key值失效,大量的請求打到資料庫上的行為。(核心:請求量大,快取失效,訪問資料庫,資料庫的值存在)

2.2 帶來的問題

資料庫壓力增大

2.3 解決方案

2.3.1 設定快取key值失效

2.3.2 對快取key 值的訪問加鎖,執行緒發現快取key值不存在,加鎖,讀資料庫,更新快取,增加key值和value,其他執行緒讀到key值取value,讀不到,等待。

3.快取雪崩

3.1 什麼是快取雪崩

大量的快取在同乙個時間失效,可以是快取設定的失效時間到了,也可以是快取伺服器宕機。所有請求都打到資料庫上。

3.2 解決方法

使用快取集群,保證快取的高可用。

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

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

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

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

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

快取穿透 在高併發下,查詢乙個不存在的值時,快取不會被命中,導致大量請求直接落到資料庫上,如活動系統裡面查詢乙個不存在的活動。快取擊穿 在高併發下,對乙個特定的值進行查詢,但是這個時候快取正好過期了,快取沒有命中,導致大量請求直接落到資料庫上,如活動系統裡面查詢活動資訊,但是在活動進行過程中活動快取...