redis常見的緩存問題(穿透、雪崩、擊穿)

redis緩存穿透

  • 簡介
    null值問題。緩存數據先從緩存查詢,再從數據庫查詢。如果key值不存在,則從db中獲取。這樣大量的請求,緩存失效,給服務器造成壓力。
  • 解決方法
    方法一:key值不存在的也保存在緩存中,設置短的過期時間,緩解db的壓力。
    方法二:布隆過濾器,即對一定不存在的key進行過濾。把所有可能的key值放到bitmap中,查詢時根據bitmap過濾。

redis緩存雪崩

  • 簡介
    大量key緩存失效不可用問題。緩存服務器重啓或大量key同一時刻失效,導致緩存不可用,給db造成很大壓力。
  • 解決方法
    方法一:不同的key設置不同的過期時間,防止同一時間段同時過期。
    方法二:緩存失效後,通過加鎖或隊列控制讀數據庫寫緩存的線程的數量。比如對某個key只允許一個線程去讀數據庫寫緩存,其他可以從緩存中讀取。
    方法三:設置二級緩存,一級緩存失效後,讀取二級緩存,二級緩存爲長時間緩存。

redis緩存擊穿

  • 簡介
    同一key緩存失效。 熱點數據在某個時間點過期,恰好這時大量的請求訪問這個可以,需要從db中查,給數據庫造成很大壓力。

  • 解決方法
    使用redis的setnx互斥鎖,一個線程從數據庫中取數據,加入緩存,其他線程從緩存中取數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章