Redis專案總結--快取穿透、快取雪崩、快取擊穿
目錄- Redis專案總結--快取穿透、快取雪崩、快取擊穿
- 一.快取穿透
- 1.什么是快取穿透
- 2.快取穿透解決方案
- 3.流程
- 二.快取雪崩
- 1.什么是快取雪崩
- 2.解決方案
- 三.快取擊穿
- 1.什么是快取擊穿
- 2.解決方案
- 3.流程
- 一.快取穿透
一.快取穿透
1.什么是快取穿透
查詢某個 Key 對應的資料,Redis 快取中沒有相應的資料,則直接到資料庫中查詢,資料庫中也不存在要查詢的資料,則資料庫會回傳空,而 Redis 也不會快取這個空結果,這就造成每次通過這樣的 Key 去查詢資料都會直接到資料庫中查詢,Redis 不會快取空結果,這就造成了快取穿透的問題,給資料庫帶來壓力,
2.快取穿透解決方案
方案一:快取空物件,對不存在的key也將空物件進行快取,并設定過期時間,
- 優點:實作簡單,維護方便,
- 缺點:額外的記憶體消耗,快取了無用key,可能導致短期的不一致,
方案二:布隆過濾,布隆過濾器可以針對大資料量的、有規律的鍵值進行處理,一條記錄是不是存在,本質上是一個 Bool 值,只需要使用 1bit 就可以存盤,我們可以使用布隆過濾器將這種表示是、否等操作,壓縮到一個資料結構中,用戶查詢時,先詢問過濾器,存在則查詢redis,不存在則直接回傳,
- 優點:記憶體占用少,沒有多余key,
- 缺點:實作復雜,存在誤判可能,
3.流程
原本流程:

使用方案一解決快取穿透的流程:

二.快取雪崩
1.什么是快取雪崩
同一段時間大量快取key同時失效(同時到期)或redis宕機導致大量請求到達資料庫,帶來巨大壓力,
2.解決方案
方案一:給不同的key的過期時間添加隨機值,使不同key的過期時間分布在一個時間段之間,
方案二:利用redis集群提高服務可用性
方案三:給快取業務添加降級限流策略
方案四:給業務添加多級快取
三.快取擊穿
1.什么是快取擊穿
快取擊穿問題也叫熱點key問題,就是一個被高并發訪問且快取重建業務又比較復雜的的key突然失效,無數的請求訪問會在瞬間給資料庫帶來巨大的沖擊,
2.解決方案
方案一:互斥鎖,加鎖后只有第一個獲取到鎖的人才能繼續去資料庫查詢,重建快取,未獲取鎖的人不能執行該步驟,只能等待一會再次查詢快取,
- 優點:沒有額外記憶體消耗,保證了一致性,實作簡單,
- 缺點:執行緒需要等待,性能受影響,有死鎖風險,
方案二:邏輯過期,熱點key一般是參與秒殺活動的熱門商品,可以將其設定為永不過期而給一個邏輯過期時間,事后手動洗掉,查詢快取發現邏輯過期時,回傳過期的資料,若他是第一個獲取到鎖的人開啟新執行緒去查詢資料庫,重建快取,重置邏輯過期時間,其他人若在此期間訪問則回傳已過期的資料,
- 優點:執行緒無需等待,性能較好,
- 缺點:不保證一致性,有額外記憶體消耗,實作復雜,
3.流程
互斥鎖:

邏輯過期:

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/539901.html
標籤:其他
上一篇:SQL審核平臺Yearning
