redis使用中存在的問題及如何避免(一)闡述了redis的阻塞問題及緩存穿透問題,本文將繼續總結redis在使用中的問題及方案。redis
雪崩問題
因爲緩存層承載着大量請求,有效的保護了存儲層,但若是緩存層因爲某些緣由不能提供服務,全部請求都會壓到存儲層,存儲層流量暴增,致使存儲層也會級聯宕機。sql
熱點key重建優化
緩存+過時時間策略便可以加速數據讀寫,又保證數據的按期更新,若出現以下兩個問題,可能會對應用產生致命危害:後端
重建緩存不能在短期內完成,如:複雜的sql、屢次IO、多個依賴等。
在緩存失效的瞬間,有大量的線程來建立緩存,形成後端負載加大,甚至致使系統崩潰。
方案:緩存
a.互斥鎖 只容許有一個線程去重建數據,其餘線程等待構建完緩存,從新從緩存中獲取數據。 b.永遠不過時 設置邏輯過時時間,判斷邏輯時間和當前時間大小,而後異步去構建數據覆蓋老數據。 a方案思路簡單,能保證一致性;但代碼複雜度增大,存在死鎖風險,存在線程池阻塞風險。 b方案基本能夠杜絕熱點key問題;但不保證一致性,邏輯過時時間增長代碼維護成本。