快取穿透,快取雪崩,熱點key及解決辦法

2021-09-08 20:11:52 字數 851 閱讀 5329

1、穿透

穿透:頻繁查詢乙個不存在的資料,由於快取不命中,每次都要查詢持久層。從而失去快取的意義。

解決辦法: 持久層查詢不到就快取空結果,查詢時先判斷快取中是否exists(key) ,如果有直接返回空,沒有則查詢後返回,注意insert時需清除查詢的key,否則即便db中有值也查詢不到(當然也可以設定空快取的過期時間)

2、雪崩

雪崩:快取大量失效的時候,引發大量查詢資料庫。

解決辦法

1)用鎖/分布式鎖或者佇列序列訪問

2)快取失效時間均勻分布

3、熱點key

熱點key:某個key訪問非常頻繁,當key失效的時候有大量執行緒來構建快取,導致負載增加,系統崩潰。

解決辦法

1使用鎖,單機用synchronized,lock等,分布式用分布式鎖。

2快取過期時間不設定,而是設定在key對應的value裡。如果檢測到存的時間超過過期時間則非同步更新快取。

3在value設定乙個比過期時間t0小的過期時間值t1,當t1過期的時候,延長t1並做更新快取操作。

4設定標籤快取,標籤快取設定過期時間,標籤快取過期後,需非同步地更新實際快取 具體參照userserviceimpl4的處理方式

總結一、查詢redis快取時,一般查詢如果以非id方式查詢,建議先由條件查詢到id,再由id查詢pojo

二、非同步kafka在消費端接受資訊後,該怎麼識別處理那張表,呼叫哪個方法,此問題暫時還沒解決

三、比較簡單的redis快取,推薦使用canal

redis快取穿透 快取雪崩和熱點key

快取穿透 穿過快取,直接訪問資料庫。解決方案 對查詢不存在的儲存到快取中value設定為null.採用布隆過濾器.如果key有規則,那麼就可以直接過濾掉無規則的key 偽 if jedis查詢快取不存在 else 返回結果 else快取雪崩 某一時刻大量的key過期,使用者又大量的查詢這些key。造...

架構學習筆記 快取 快取穿透 快取雪崩 快取熱點

快取沒有生效,大量請求訪問某乙個key的資料 實際快取中並不存在該key的快取 然後都轉而降級查詢db 去了,最終的結果是db查詢壓力增大。可能的發生場景 解決辦法快取失效後由於需要重新生成快取,在生成快取的時間內接收到的請求大量請求,引起系統效能驟然下降。解決辦法更新鎖機制 對快取更新進行加鎖保護...

快取穿透 快取擊穿 快取雪崩 熱點資料失效

在我們專案中,多少是會使用快取知識的,因為對於很多資料沒必要每次都到資料庫中進行查詢,如果每次都到資料庫中進行查詢,當出現併發情況時,可能會導致資料庫的宕機。比如一些經常查詢但是又不經常修改的資料,我們可以直接將資料存入快取中,以減少資料庫的壓力。當然在實現快取的時候,我們也會遇見很多問題,於是彙總...