緩存穿透、緩存雪崩、緩存擊穿、緩存預熱

實際工作中雖然沒有遇到過,但是這種事情還是不要遇到的好,所以提前加好防護策略測試王道。

1.緩存雪崩

緩存雪崩是指原本應該訪問緩存的都直接訪問底層數據庫了,例如大量緩存數據在同一時間過期,導致大量請求直接訪問底層數據庫,導致底層數據庫崩潰。

解決方案:

1)緩存數據過期時間分散(過期時間加隨機數)

2)底層數據庫訪問加鎖或者將讀寫請求放入消費隊列

2.緩存穿透

用戶查詢的數據,數據庫中沒有,那緩存中也不會有,用戶就會繞過緩存直接查詢底層數據庫,如果用戶大量進行這種操作,比如黑客攻擊,就會造成底層數據庫崩潰,這種現象成爲緩存穿透。

解決方案:

1)對查詢結果爲空的情況也進行緩存,緩存時間設置短一點,或者該key對應的數據insert了之後清理緩存。

2)對一定不存在的key進行過濾。可以把所有的可能存在的key放到一個大的Bitmap中,查詢時通過該bitmap過濾。

3)布隆過濾器:布隆過濾器的原理是,當一個元素被加入集合時,通過K個散列函數將這個元素映射成一個位數組中的K個點,把它們置爲1。檢索時,我們只要看看這些點是不是都是1就(大約)知道集合中有沒有它了:如果這些點有任何一個0,則被檢元素一定不在;如果都是1,則被檢元素很可能在。這就是布隆過濾器的基本思想。redis的布隆過濾器插件可以很好的解決這個問題,詳情點擊

4)接口層校驗,不合法請求直接拒絕

3.緩存擊穿

緩存擊穿和和緩存雪崩相似,例如某個key的訪問量非常大,突然過期了,導致大量的訪問直接打到底層數據庫,造成底層數據庫崩潰,這種現象成爲緩存擊穿。

解決方案:

1)熱點數據永不過期

2)定是腳本,定時更新熱點數據

3.緩存預熱

爲了避免系統上線後大量直接訪問底層數據庫操作,事先將某些數據放入緩存,以緩解底層數據庫壓力

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章