Redis緩存相關問題
1 緩存穿透
緩存穿透是指查詢一個數據庫一定不存在的數據.
正常使用Redis緩存的流程大致是:
- 數據查詢首先進行緩存查詢
- 如果數據存在則直接返回緩存數據
- 如果數據不存在,就對數據庫進行查詢,並把查詢到的數據放進緩存
- 如果數據庫查詢數據爲空,則不放進緩存
如果有人惡意查詢數據庫中不存在的數據,就會對數據庫造成壓力,甚至壓垮數據庫,解決該問題的方法爲:
如果從數據庫中查詢的對象爲空,也放入緩存,將用戶提交的主鍵值其value設爲null,並且將緩存過期時間設爲60秒,即使惡意攻擊也是從緩存中查詢爲null,不會頻繁查詢數據庫.
2 緩存雪崩
緩存雪崩,是指在某一個時間段,緩存集中過期失效.在緩存集中失效的這個時間段對數據的訪問查詢,都落到了數據庫上,對於數據庫而言,就會產生週期性的壓力波峯.
爲了避免雪崩的發生,可以將緩存的數據設置不同的失效時間.將訪問頻率高的數據緩存時間設置長一些,冷門的時間短一些.
3 緩存擊穿
緩存擊穿,是指一個 key 非常熱點,不停的被集中的進行訪問,當這個數據在key失效的瞬間,持續的併發訪問就會擊破緩存,直接請求到數據庫上.
將熱點數據設置永不過期就可以解決緩存擊穿的問題了.