key會過期狐援,通過過期時間或者 LRU LFU規(guī)則清除
緩存擊穿
前置條件
- key過期了
- 發(fā)生了高并發(fā)
key的過期出現了并發(fā)訪問數據庫
最終目的
阻止高并發(fā)請求直接打到數據庫
解決方案
通過鎖進行阻塞
1.如果key為空,
2.調用api setnx() ->獲取鎖
3-1. 獲得鎖的請求去訪問數據庫
3-2. 失敗的請求等待鎖請求獲取數據并set到redis中
問題1
如果獲得鎖得請求掛了,怎么辦
解決方案
在setnx中對鎖得過期時間進行設置
問題2
鎖請求沒掛咕村,但是鎖超時了场钉?
解決方案
一個線程取db
一個線程監(jiān)控是否取回來
更新延長鎖得時間
緩存穿透
前置條件
從業(yè)務接收查詢得是系統中根本不存在得數據,大量并發(fā)直接打到數據庫
最終目的
阻止這些無效請求直接打到數據庫
解決方案
通過布隆過濾器將數據放在過濾器中懈涛,請求過來之后先通過布隆過濾器進行無效請求過濾逛万,再打到redis查詢,如果出現擊穿批钠,再由擊穿解決方案解決
緩存雪崩
前置條件 1
時點性無關的大量的key同時失效宇植,間接造成了大量的訪問直接到達數據庫
解決方案
- 將key設置隨機時間
前置條件 2
按時間節(jié)點 key必須過期
解決方案
可以考慮強依賴擊穿方案進行解決
前置條件 3
結果類的緩存, 實際業(yè)務:數據上報結果緩存在redis中供客戶端查詢埋心,30分鐘過期指郁,過期后客戶再進行查詢,數據庫中存在拷呆,需要并發(fā)到數據庫查詢
解決方案
通過bitmap修改業(yè)務代碼闲坎, 存儲在bitmap中,0為成功 1為失敗茬斧,通過bitmap查詢到失敗腰懂,再通過擊穿解決方案解決