快取穿透
查詢快取步驟:
- 查詢K-V資料庫快取,存在回傳
- 如果資料不存在,則查詢后端sql資料庫
快取穿透:
惡意請求會故意查詢在redis等快取資料庫里面不存在的Key,來引發后端資料庫的查詢,如果資料量很大,則會增加后端的壓力,這就是 快取穿透
如何避免?
- 請求過濾:對所有可能的請求查詢先快取(布隆過濾、BitMap存盤...),在Controller層請求過來進行校驗,如果引數符合規則,那么放行,不符合則回傳錯誤,
- 快取空值:如果請求過來快取資料庫查不到同時后端資料庫也查不到,則也快取空值,但是要注意快取的時間限制的短一些,下次再來請求直接回傳快取的空值,如果這個Key有資料Insert了,則需要立即洗掉快取的空值,防止影響業務,
- 檢查更新:每次有請求過來先檢查 key過期時間,及時更新
快取雪崩
當快取服務器重啟或者大量快取集中在某一個時間段失效,這樣在失效的時候,會給后端系統帶來很大壓力,導致系統崩潰,
解決方案:
- 高可用集群
- 限流降級、加鎖
- 定時任務不斷檢查,預先更新快過期快取
快取并發
比如快取雪崩后,大量的資料又從資料庫里面查詢后大量資料進行快取,
解決方案:
分布式鎖、控制并發數
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/27648.html
標籤:其他
