redis緩存穿透
- 簡介
null值問題。緩存數據先從緩存查詢,再從數據庫查詢。如果key值不存在,則從db中獲取。這樣大量的請求,緩存失效,給服務器造成壓力。 - 解決方法
方法一:key值不存在的也保存在緩存中,設置短的過期時間,緩解db的壓力。
方法二:布隆過濾器,即對一定不存在的key進行過濾。把所有可能的key值放到bitmap中,查詢時根據bitmap過濾。
redis緩存雪崩
- 簡介
大量key緩存失效不可用問題。緩存服務器重啓或大量key同一時刻失效,導致緩存不可用,給db造成很大壓力。 - 解決方法
方法一:不同的key設置不同的過期時間,防止同一時間段同時過期。
方法二:緩存失效後,通過加鎖或隊列控制讀數據庫寫緩存的線程的數量。比如對某個key只允許一個線程去讀數據庫寫緩存,其他可以從緩存中讀取。
方法三:設置二級緩存,一級緩存失效後,讀取二級緩存,二級緩存爲長時間緩存。
redis緩存擊穿
-
簡介
同一key緩存失效。 熱點數據在某個時間點過期,恰好這時大量的請求訪問這個可以,需要從db中查,給數據庫造成很大壓力。 -
解決方法
使用redis的setnx互斥鎖,一個線程從數據庫中取數據,加入緩存,其他線程從緩存中取數據。