一般正常的快取流程圖:
1.快取雪崩 原因:大量的快取同一時間失效,導致大量的請求都直接請求資料庫,從而造成資料庫掛掉,進而影響頁面無法正常工作了 解決方案: 1-設定快取失效時間,使其不在同一時間失效,隨機初始化失效時間,這樣就不會同時失效 2-將熱點key放到叢集中的不同節點上 3-最暴力的方式就是不設定失效時間(一般不採取) 4-設定定時任務,使其不定時重新整理快取失效時間
2.快取穿透 原因:非法使用者在請求中傳入非法資料到請求,在redis中查詢不到就會去資料庫查,從而導致資料庫掛掉,一般都是惡意使用者 解決方案: 1-不管查詢資料庫得到什麼結果,即使是null,也快取到redis中,下次再有這樣的請求也可以直接返回,當然也會換不同的請求 2-直接拉黑這個IP,當然也有可能換不同的IP 3-對引數的合法性進行校驗,引數不合法直接返回 4-使用布隆過濾器,這就是個新技術了
3.快取擊穿 原因:大量的請求去存取某個key,但突然間這個key失效了,從而直接存取資料庫,導致資料庫掛掉了 解決方案: 1-最暴力解決就是永不失效這個可以,當然一般採取這樣的方式 2-分散式應用就可以使用分散式鎖,單體應用就可以用互斥鎖,就是隻有一個執行緒能獲取該鎖進行存取資料庫,查詢到後快取到redis,後面的請求就直接存取redis,從而防止擊穿