緩存預熱
- 問題:服務器啓動後迅速宕機
- 原因: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地址進行拉黑