Redis系列 - 快取雪崩、擊穿、穿透及解決方案
Redis系列 - 快取雪崩、擊穿、穿透及解決方案
快取雪崩、快取擊穿和快取穿透一旦發生,會導致大量的請求積壓到資料庫層。如果請求的併發量很大,就會導致資料庫當機或是故障,這就是很嚴重的生產事故了。
快取雪崩
快取雪崩是指快取中資料大批量到過期時間,而查詢資料量巨大,引起資料庫壓力過大甚至當機。
快取雪崩一般是由兩個原因導致的
- 快取大面積失效
- Redis 快取例項發生故障當機了,無法處理請求,這就會導致大量請求一下子打到資料庫層
解決方案
- 快取資料的過期時間設定隨機值(例如,隨機增加1~5分鐘),防止同一時間大量資料過期現象發生。
- 事前:redis高可用,主從+哨兵+redis cluster,避免全盤崩潰
- 事中:本地cache快取 + 限流&降級,避免MySQL被打爆
- 事後:redis持久化RDB+AOF,快速恢復快取資料
快取擊穿
快取擊穿是指,針對某個訪問非常頻繁的熱點資料的請求,無法在快取中進行處理,緊接著,訪問該資料的大量請求,一下子都傳送到了後端資料庫,導致了資料庫壓力激增,會影響資料庫處理其他請求。快取擊穿的情況,經常發生在熱點資料過期失效時。
解決方案
- 設定熱點資料永遠不過期。
- 加互斥鎖,當從快取中獲取資料失敗時,去資料庫獲取資料的程式碼片段加互斥鎖
快取穿透
快取穿透是指快取和資料庫中都沒有的資料,而使用者不斷髮起請求,如發起為id為“-1”的資料或id為特別大不存在的資料。這時的使用者很可能是攻擊者,攻擊會導致資料庫壓力過大。
產生的常見原因有下面兩個:
- 業務層誤操作:快取中的資料和資料庫中的資料被誤刪除了,所以快取和資料庫中都沒有資料
- 惡意攻擊:攻擊者惡意訪問資料庫中沒有的資料
解決方案
- 快取空值或預設值
- 使用布隆過濾器快速判斷資料是否存在,避免從資料庫中查詢資料是否存在,減輕資料庫壓力
相關文章
- 【Redis】快取穿透,快取擊穿,快取雪崩及解決方案Redis快取穿透
- REDIS快取穿透,快取擊穿,快取雪崩原因+解決方案Redis快取穿透
- Redis系列:快取擊穿.穿透.雪崩(九)Redis快取穿透
- Redis 快取擊穿、穿透、雪崩的原因以及解決方案Redis快取穿透
- 快取穿透、快取擊穿、快取雪崩概念及解決方案快取穿透
- Redis快取擊穿、快取穿透、快取雪崩Redis快取穿透
- [Redis]快取穿透/快取擊穿/快取雪崩Redis快取穿透
- Redis快取穿透,擊穿和雪崩Redis快取穿透
- Redis 快取擊穿(失效)、快取穿透、快取雪崩怎麼解決?Redis快取穿透
- 快取穿透,快取擊穿,快取雪崩解決方案分析快取穿透
- Redis詳解(十二)------ 快取穿透、快取擊穿、快取雪崩Redis快取穿透
- Redis 快取穿透、快取雪崩原理及解決方案Redis快取穿透
- 快取穿透、快取擊穿、快取雪崩區別和解決方案快取穿透
- Redis快取穿透/快取雪崩/快取擊穿(案例:產生的原因 解決方案利/弊)Redis快取穿透
- Redis 快取雪崩,快取擊穿和快取穿透技術方案總結Redis快取穿透
- 怎麼學Redis 快取穿透、擊穿、雪崩Redis快取穿透
- 關於快取穿透、快取擊穿、快取雪崩的模擬與解決(Redis)快取穿透Redis
- 快取穿透、快取擊穿、快取雪崩快取穿透
- 快取穿透、快取雪崩、快取擊穿快取穿透
- 什麼是redis快取雪崩、快取穿透、快取擊穿Redis快取穿透
- Redis——快取穿透、快取擊穿、快取雪崩、分散式鎖Redis快取穿透分散式
- 一文讀懂快取穿透、快取擊穿、快取雪崩及其解決方案快取穿透
- Redis的快取穿透、快取雪崩、快取擊穿的區別Redis快取穿透
- 面試總結 —— Redis “快取穿透”、“快取擊穿”、“快取雪崩”面試Redis快取穿透
- 一文徹底弄懂並解決Redis的快取雪崩,快取擊穿,快取穿透Redis快取穿透
- 快取穿透、快取擊穿、快取雪崩的場景以及解決方法快取穿透
- Redis雪崩、擊穿、穿透Redis穿透
- redis雪崩,穿透,擊穿Redis穿透
- 快取穿透、快取擊穿、快取雪崩區別快取穿透
- 如何設計快取系統:快取穿透,快取擊穿,快取雪崩解決方案分析快取穿透
- 快取穿透、快取擊穿、快取雪崩、快取預熱快取穿透
- Redis 面試常見問題———快取雪崩、快取擊穿以及快取穿透Redis面試快取穿透
- 快取穿透、快取雪崩和快取擊穿是什麼?快取穿透
- 來說說快取穿透、快取擊穿、快取雪崩都是什麼?怎麼解決?快取穿透
- 【乾貨!!】三句話搞懂 Redis 快取穿透、擊穿、雪崩Redis快取穿透
- Redis擊穿、穿透、雪崩產生原因以及解決思路Redis穿透
- redis的雪崩、擊穿和穿透Redis穿透
- Redis快取穿透、擊穿、雪崩,資料庫與快取一致性Redis快取穿透資料庫