1. 程式人生 > 其它 >快取雪崩、快取穿透、快取擊穿概念及解決方案

快取雪崩、快取穿透、快取擊穿概念及解決方案

個人理解:

我們先了解一下雪崩、穿透、擊穿這幾個單詞的含義唄。
雪崩:當山坡積雪內部的內聚力抗拒不了它所受到的重力拉引時,便向下滑動,引起大量雪體崩塌,人們把這種自然現象稱作雪崩
穿透:以前玩CS、CF時有種外掛就是透視掛,可以直接無視牆看到你人在哪裡。
擊穿:字面意思咯,開槍擊穿了牆,打到你人的身體上;那這個牆就被擊穿了。

快取雪崩:快取大部分失效或快取宕機,導致請求到達了資料庫,資料庫扛不住壓力掛了,導致服務也跟著掛。因快取引起的服務崩塌。
快取穿透:資料不存在,請求繞過了快取或者根本不在快取裡,直接去查詢資料庫。
快取擊穿:熱點快取失效,請求到了資料庫。

區別:快取雪崩是大部分的key失效,擊穿是說熱點key失效,穿透是key不存在快取和資料庫中


快取雪崩

快取大部分失效或快取宕機,導致請求到達了資料庫,資料庫扛不住壓力掛了,導致服務也跟著掛。因快取引起的服務崩塌。

造成原因

大部分key失效、熱點資料失效、快取服務宕機不可用

解決方案

  • 宕機的話可以,建立叢集,提高可用性
  • 資料失效的話,可以用多級快取,本地程序作為一級快取,redis作為二級快取,不同級別的快取設定的超時時間不同,即使某級快取過期了,也有其他級別快取兜底
  • 快取過期時間設定隨機數,不要讓資料再同個時間段一起失效

快取穿透

查詢一個根本不存在的資料,快取層、持久層都不會命中。

造成原因

攻擊者,經常查詢一些不會存在的資料, 比如查詢商品id= -1

解決方案

  • 介面層做校驗,id<0 返回錯誤
  • 使用布隆過濾器
  • 非法請求多次的ip進行拉黑

快取擊穿

熱點快取失效,請求到了資料庫。

造成原因

  • 當前key是一個熱點key(例如一個秒殺活動),併發量非常大。
  • 重建快取不能在短時間完成,可能是一個複雜計算,例如複雜的SQL、多次IO、多個依賴等。

解決方案

  • 快取過期時間設定永不過期

參考:https://blog.csdn.net/womenyiqilalala/article/details/105205532