緩存問題[雪崩、擊穿]

緩存穿透

查詢緩存步驟:redis

  1. 查詢K-V數據庫緩存。存在返回
  2. 若是數據不存在,則查詢後端sql數據庫

緩存穿透sql

惡意請求會故意查詢在redis等緩存數據庫裏面不存在的Key,來引起後端數據庫的查詢。若是數據量很大,則會增長後端的壓力。這就是 緩存穿透數據庫

如何避免?後端

  1. 請求過濾:對全部可能的請求查詢先緩存(布隆過濾、BitMap存儲...)。在Controller層請求過來進行校驗,若是參數符合規則,那麼放行,不符合則返回錯誤。
  2. 緩存空值:若是請求過來緩存數據庫查不到同時後端數據庫也查不到,則也緩存空值。可是要注意緩存的時間限制的短一些。下次再來請求直接返回緩存的空值。若是這個Key有數據Insert了,則須要當即刪除緩存的空值,防止影響業務。
  3. 檢查更新:每次有請求過來先檢查 key過時時間,及時更新

緩存雪崩

當緩存服務器重啓或者大量緩存集中在某一個時間段失效,這樣在失效的時候,會給後端系統帶來很大壓力。致使系統崩潰。緩存

解決方案:服務器

  1. 高可用集羣
  2. 限流降級、加鎖
  3. 定時任務不斷檢查,預先更新快過時緩存

緩存併發

好比緩存雪崩後,大量的數據又從數據庫裏面查詢後大量數據進行緩存。併發

解決方案:分佈式

分佈式鎖、控制併發數it

相關文章
相關標籤/搜索