Redis系列十:常見問題解決方案

緩存預熱

  • 問題:服務器啓動後迅速宕機
  • 原因:1. 請求數量較高 2. 主從之間數據吞吐量較大,數據同步操作頻度較高
  • 解決方案:
    1. 將統計結果中的數據分類,根據級別,redis優先加載級別較高的熱點數據
    2. 利用分佈式多服務器同時進行數據讀取,提速數據加載過程
    3. 熱點數據主從同時預熱

總結:緩存預熱就是系統啓動前,提前將相關的緩存數據直接加載到緩存系統。避免在用戶請求的時候,先查詢數據庫,然後再將數據緩 存的問題!用戶直接查詢事先被預熱的緩存數據!

緩存雪崩

  • 問題:在一個較短的時間內,緩存中較多的key集中過期,然後請求的數據在redis中未命中,此時redis需要向數據庫獲取數據,數據庫接收大量請求無法及時處理,崩潰!重啓後仍然面對無緩存可用,redis面臨大量請求被積壓,也崩潰了,集羣崩塌瓦解,應用服務器無法響應請求,來自客戶端的請求越來越多,應用服務器崩潰。
  • 原因:短時間範圍內大量key集中過期
  • 解決方案:
    1.構建多級緩存:
          Nginx緩存+redis緩存
    2.MySQL嚴重耗時業務優化  
    3.災難預警:
          監控redis的性能指標  
    4.限流、降級:
          短時間犧牲一些客戶體驗,限制一些請求
    5.LRU與LCU切換
    6.超熱數據使用永久KEY
    7.定期維護,對熱點數據延時

緩存擊穿

  • 問題:數據庫連接量瞬間激增,Redis、cup正常無波動,數據庫崩潰
  • 原因:單個高熱數據key過期
  • 解決方案:
    1. 預先設定 以電商爲例,每個商家根據店鋪等級,指定若干款主打商品,在購物節期間,加大此類信息key的過期時長 
    2. 現場調整 監控訪問量,對自然流量激增的數據延長過期時間或設置爲永久性key
    3. 加鎖 分佈式鎖,防止被擊穿,但是要注意也是性能瓶頸,慎重!

緩存穿透

  • 問題:1. Redis中大面積出現未命中 2. 出現非正常URL訪問
  • 原因:獲取的數據在數據庫中也不存在,數據庫查詢未得到對應數據。(出現黑客攻擊服務器)
  • 解決方案:
    1.設置過濾器:正常訪問放行,異常數據直接攔截(效率低)
    2.設置黑名單,對IP地址進行拉黑
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章