## 什么是緩存雪崩
* 下圖描述了什么是緩存雪崩:由于緩存層承載著大量請求,有效地保護了存儲層,但是**如果緩存層由于某些原因不能提供服務,于是所有的請 求都會達到存儲層,存儲層的調用量會暴增,造成存儲層也會級聯宕機的情況**

* 緩存雪崩的英文原意是stampeding herd(奔逃的野牛),指的是緩存層宕掉后,流量會像奔逃的野牛一樣,打向后端存儲
## 優化
**預防和解決緩存雪崩問題,可以從以下三個方面進行著手:**
* 1)保證緩存層服務高可用性。和飛機都有多個引擎一樣,如果緩存層 設計成高可用的,即使個別節點、個別機器、甚至是機房宕掉,依然可以提 供服務,例如前面介紹過的Redis Sentinel和Redis Cluster都實現了高可用。
* 2)依賴隔離組件為后端限流并降級
* 無論是緩存層還是存儲層都會有出錯的概率,可以將它們視同為資源。作為并發量較大的系統,假如有一個資源不可用,可能會造成線程全部阻塞(hang)在這個資源上,造成整個系統不可用。降級機制在高并發系統中是非常普遍的:比如推薦服務中,如果個性化推薦服務不可用,可以降級補充熱點數據,不至于造成前端頁面是開天窗。在實際項目中,我們需要對重要的資源(例如Redis、MySQL、 HBase、外部接口)都進行隔離,**讓每種資源都單獨運行在自己的線程池中,**即使個別資源出現了問題,對其他服務沒有影響。但是線程池如何管理,比如如何關閉資源池、開啟資源池、資源池閥值管理,這些做起來還是相當復雜的
* 這里推薦一個Java依賴隔離工具 Hystrix([https://github.com/netflix/hystrix](https://github.com/netflix/hystrix)),如下圖所示。Hystrix是解決依 賴隔離的利器,但是該內容已經超出本書的范圍,同時只適用于Java應用, 所以這里不會詳細介紹
* 3)提前演練。在項目上線前,演練緩存層宕掉后,應用以及后端的負載情況以及可能出現的問題,在此基礎上做一些預案設定
- Redis簡介
- 簡介
- 典型應用場景
- Redis安裝
- 安裝
- redis可執行文件說明
- 三種啟動方法
- Redis常用配置
- API的使用和理解
- 通用命令
- 數據結構和內部編碼
- 單線程
- 數據類型
- 字符串
- 哈希
- 列表
- 集合
- 有序集合
- Redis常用功能
- 慢查詢
- Pipline
- 發布訂閱
- Bitmap
- Hyperloglog
- GEO
- 持久化機制
- 概述
- snapshotting快照方式持久化
- append only file追加方式持久化AOF
- RDB和AOF的抉擇
- 開發運維常見問題
- fork操作
- 子進程外開銷
- AOF追加阻塞
- 單機多實例部署
- Redis復制原理和優化
- 什么是主從復制
- 主從復制配置
- 全量復制和部分復制
- 故障處理
- 開發運維常見問題
- Sentinel
- 主從復制高可用
- 架構說明
- 安裝配置
- 客戶端連接
- 實現原理
- 常見開發運維問題
- 高可用讀寫分離
- 故障轉移client怎么知道新的master地址
- 總結
- Sluster
- 呼喚集群
- 數據分布
- 搭建集群
- 集群通信
- 集群擴容
- 集群縮容
- 客戶端路由
- 故障轉移
- 故障發現
- 故障恢復
- 開發運維常見問題
- 緩存設計與優化
- 緩存收益和成本
- 緩存更新策略
- 緩存粒度控制
- 緩存穿透優化
- 緩存雪崩優化
- 無底洞問題優化
- 熱點key重建優化
- 總結
- 布隆過濾器
- 引出布隆過濾器
- 布隆過濾器基本原理
- 布隆過濾器誤差率
- 本地布隆過濾器
- Redis布隆過濾器
- 分布式布隆過濾器
- 開發規范
- 內存管理
- 開發運維常見坑
- 實戰
- 對文章進行投票
- 數據庫的概念
- 啟動多實例