緩存穿透
查詢緩存步驟:redis
- 查詢K-V數據庫緩存。存在返回
- 若是數據不存在,則查詢後端sql數據庫
緩存穿透:sql
惡意請求會故意查詢在redis等緩存數據庫裏面不存在的Key,來引起後端數據庫的查詢。若是數據量很大,則會增長後端的壓力。這就是 緩存穿透數據庫
如何避免?後端
- 請求過濾:對全部可能的請求查詢先緩存(布隆過濾、BitMap存儲...)。在Controller層請求過來進行校驗,若是參數符合規則,那麼放行,不符合則返回錯誤。
- 緩存空值:若是請求過來緩存數據庫查不到同時後端數據庫也查不到,則也緩存空值。可是要注意緩存的時間限制的短一些。下次再來請求直接返回緩存的空值。若是這個Key有數據Insert了,則須要當即刪除緩存的空值,防止影響業務。
- 檢查更新:每次有請求過來先檢查 key過時時間,及時更新
緩存雪崩
當緩存服務器重啓或者大量緩存集中在某一個時間段失效,這樣在失效的時候,會給後端系統帶來很大壓力。致使系統崩潰。緩存
解決方案:服務器
- 高可用集羣
- 限流降級、加鎖
- 定時任務不斷檢查,預先更新快過時緩存
緩存併發
好比緩存雪崩後,大量的數據又從數據庫裏面查詢後大量數據進行緩存。併發
解決方案:分佈式
分佈式鎖、控制併發數it