Redis雪崩、穿透、熱點key等優化


一、緩存

 


Redis做緩存是最常見的應用場景。客戶端請求在緩存層命中就直接返回,如果miss就去讀取存儲層,存儲層讀取到就寫入緩存層,然后再返回到客戶端。
優點:
加速讀寫
降低后端負載
缺點:
數據的不一致性
代碼維護成本
運維成本

二、緩存穿透優化

 


然而緩存可能會遇到這種問題:請求cache拿不到數據,就會去存儲層拿,都拿不到時,返回空值(可能會返回大量空值)。或者代碼有問題,拿不到數據。就會一直請求數據。導致后端打崩。

優化方法:
1、緩存層緩存空值。
–緩存太多空值,占用更多空間。(優化:給個空值過期時間)
–存儲層更新代碼了,緩存層還是空值。(優化:后台設置時主動刪除空值,並緩存把值進去)

三、緩存雪崩優化

 


redis掛了,客戶端直接請求到數據庫里面。數據庫負載非常高。甚至數據庫拖掛了。

優化方法:
1、保持緩存層服務器的高可用。
–監控、集群、哨兵。當一個集群里面有一台服務器有問題,讓哨兵踢出去。
2、依賴隔離組件為后端限流並降級。
比如推薦服務中,如果個性化推薦服務不可用,可以降級為熱點數據。
3、提前演練。
演練 緩存層crash后,應用以及后端的負載情況以及可能出現的問題。
對此做一些預案設定。

四、熱點key 重建優化:

 


A、B、C、D同時請求一個資源,不存在時都要去請求存儲層,有可能會拖掛。

優化方法:
1、互斥鎖:
只允許一個請求重建緩存。
其他請求等待緩存重建執行完,重新從緩存獲取數據即可。

 


2、用戶過期
–“物理”不過期
–邏輯設置過期時間(根據上一次更新時間,構建一個隊列,主動去更新)

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM