對於發生的故障是緩存雪崩、擊穿、穿透,是由發生時的類型決定的,對於不同的類型雖說有不同的解決方案,但是設計一套靈活且周密的架構纔是核心。
緩存穿透
在緩存中未命中,在數據庫中也未命中;由於大量請求在緩存中未命中導致數據庫層壓力巨大出現故障
應對策略
- 緩存null對象
- 增加白名單
- 攔截非法請求
緩存擊穿
大量熱點頻繁Key過期,導致數據庫壓力在某一時刻增大出現故障
應對策略
- 熱點key不設置過期時間,由後臺動態處理
- 增加互斥鎖機制,只能有一個請求進行處理一個Key的的緩存
緩存雪崩
大量key都過期,或者緩存宕機,導致請求都走到數據庫
應對策略
- 均勻設置過期時間,避免一起過期造成的雪崩
- 增加互斥鎖機制
- 雙Key策略,主Key失效了,使用從Key,當數據更新時,主Key和從Key都進行更新
- 服務熔斷
- 請求限流
- 集羣redis,哨兵,集羣等
不難看出上面其實就是發生時刻的類型決定的結果,其實我們在設計系統時刻,根據不同的業務,規模,環境等情況,使用不同的架構才能保證系統的安全,高可用。