Redis快取雪崩,快取穿透,快取擊穿

2022-09-07 21:24:31 字數 1366 閱讀 2283

快取雪崩

因為快取失效導致資料未載入到記憶體中,或者快取時間大面積地失效,從而導致所有請求都會去查資料庫,導致資料庫、cpu和記憶體負載過高,甚至宕機。

1.超熱資料設定為永久key或者延時

2、優化過期時間設定方案:不同類的資料設定不同的過期時間,每個key的時間都為當前類的過期時間+乙個隨機值

比如 a類90分鐘 b類80分鐘

那a001設定為90+隨機值 ,b001設定為80+隨機值。避免大量的 key 在同一時刻同時失效,造成快取雪崩。

3、使用分布式鎖重建快取

當快取不存在時,加鎖,高併發下,只允許乙個請求去資料庫獲取,獲取完重新放入快取。

分布式環境下使用redis 分布式鎖實現快取重建,優點是設計思路簡單,對資料一致性有保障;缺點是**複雜度增加,有可能會造成使用者等待。假設在高併發下,快取重建期間 key 是鎖著的,如果當前併發 1000 個請求,其中 999 個都在阻塞,會導致 999 個使用者請求阻塞而等待。

4、雙層快取

redis與資料庫之間再加一層 本地快取ehcache,redis瞬間大部分資料過期,還可以從ehcache獲取,撐一段時間

5、人為監控,檢視超熱資料狀態,臨時調整

6、限流,降級策略

犧牲一部分請求,降低伺服器壓力

快取擊穿:跟快取雪崩類似,只不過是單個熱點key過期,瞬間大量請求過來,未命中redis後,都打在了資料庫上。

解決方案也和雪崩類似

快取穿透:訪問無效的key,redis,資料庫都沒有這個key

效能監控指標

//獲取指定客戶端的 實時各項指標資訊

127.0.0.1:6380> info

//監控當前客戶端的所有實時連線會話,所有當前6380服務需要執行的命令

127.0.0.1:6380> monitor

//壓測指令

[root@gqxcentos7 redis-6.2.6]# redis-benchmark

//慢資料相關日誌

127.0.0.1:6380> slowlog get

Redis快取穿透 快取雪崩

把redis作為快取使用已經是司空見慣,但是使用redis後也可能會碰到一系列的問題,尤其是資料量很大的時候,經典的幾個問題如下 一 快取和資料庫間資料一致性問題 分布式環境下 單機就不用說了 非常容易出現快取和資料庫間的資料一致性問題,針對這一點的話,只能說,如果你的專案對快取的要求是強一致性的,...

Redis 快取穿透 快取雪崩

目錄 1.快取穿透 如何避免?如何選擇?2 快取擊穿 如何解決 3.快取雪崩 如何解決?快取穿透 一般的快取系統,都是按照key去快取查詢,如果不存在對應的value,就應該去後端系統查詢 比如db 一些惡意的請求會故意查詢不存在的key,請求量很大,就會對後端系統造成很大的壓力,或導致資料庫異常。...

redis快取穿透 快取雪崩

什麼是快取雪崩 在同一時間內大量的快取資料失效,大量的請求都會去資料庫查詢,造成快取雪崩。解決方法 這個沒有完美的解決方法,但是可以分析使用者行為,盡量讓失效時間點均勻分布,還有就是在快取失效後,通過加鎖或者佇列來控制讀資料庫寫快取的執行緒數量,比如對某國key只允許乙個執行緒查詢資料庫和快取,其他...