快取雪崩、快取穿透、快取擊穿概念及解決方案
阿新 • • 發佈:2021-08-20
個人理解:
我們先了解一下雪崩、穿透、擊穿這幾個單詞的含義唄。
雪崩:當山坡積雪內部的內聚力抗拒不了它所受到的重力拉引時,便向下滑動,引起大量雪體崩塌,人們把這種自然現象稱作雪崩。
穿透:以前玩CS、CF時有種外掛就是透視掛,可以直接無視牆看到你人在哪裡。
擊穿:字面意思咯,開槍擊穿了牆,打到你人的身體上;那這個牆就被擊穿了。
快取雪崩:快取大部分失效或快取宕機,導致請求到達了資料庫,資料庫扛不住壓力掛了,導致服務也跟著掛。因快取引起的服務崩塌。
快取穿透:資料不存在,請求繞過了快取或者根本不在快取裡,直接去查詢資料庫。
快取擊穿:熱點快取失效,請求到了資料庫。
區別:快取雪崩是大部分的key失效,擊穿是說熱點key失效,穿透是key不存在快取和資料庫中
快取雪崩
快取大部分失效或快取宕機,導致請求到達了資料庫,資料庫扛不住壓力掛了,導致服務也跟著掛。因快取引起的服務崩塌。
造成原因
大部分key失效、熱點資料失效、快取服務宕機不可用
解決方案
- 宕機的話可以,建立叢集,提高可用性
- 資料失效的話,可以用多級快取,本地程序作為一級快取,redis作為二級快取,不同級別的快取設定的超時時間不同,即使某級快取過期了,也有其他級別快取兜底
- 快取過期時間設定隨機數,不要讓資料再同個時間段一起失效
快取穿透
查詢一個根本不存在的資料,快取層、持久層都不會命中。
造成原因
攻擊者,經常查詢一些不會存在的資料, 比如查詢商品id= -1
解決方案
- 介面層做校驗,id<0 返回錯誤
- 使用布隆過濾器
- 非法請求多次的ip進行拉黑
快取擊穿
熱點快取失效,請求到了資料庫。
造成原因
- 當前key是一個熱點key(例如一個秒殺活動),併發量非常大。
- 重建快取不能在短時間完成,可能是一個複雜計算,例如複雜的SQL、多次IO、多個依賴等。
解決方案
- 快取過期時間設定永不過期
參考:https://blog.csdn.net/womenyiqilalala/article/details/105205532