### “緩存粒度”概念說明
* 例如現在需要將MySQL的用戶信息使用Redis緩存,可以執行如下操作:
* 從MySQL獲取用戶信息:
~~~
select * from user where id={id};
~~~
* 將用戶信息緩存到Redis中:
~~~
set user:{id} 'select * from user where id={id}'
~~~
* 假設用戶表有100個列,需要緩存到什么維度呢?
* **緩存全部列:**
~~~
set user:{id} 'select * from user where id={id}'
~~~
* **緩存部分重要列:**
~~~
set user:{id} 'select {important Column1}, {important Column2} ,...{important ColumnN} from user where id={id}'
~~~
* 上述這個問題就是緩存粒度問題
* 究竟是緩存全部屬性還是只緩存部分重要屬性呢?**下面將從通用性、空間占用、代碼維護三個角度進行說明:**
* **通用性**:緩存全部數據比部分數據更加通用,但從實際經驗看,很長時 間內應用只需要幾個重要的屬性
* **空間占用**:緩存全部數據要比部分數據占用更多的空間,可能存在以下 問題:
* 全部數據會造成內存的浪費
* 全部數據可能每次傳輸產生的網絡流量會比較大,耗時相對較大,在極端情況下會阻塞網絡
* 全部數據的序列化和反序列化的CPU開銷更大。
* **代碼維護**:全部數據的優勢更加明顯,而部分數據一旦要加新字段需要修改業務代碼,而且修改后通常還需要刷新緩存數據
* **下圖給出緩存全部數據和部分數據在通用性、空間占用、代碼維護上的對比:**

* 緩存粒度問題是一個容易被忽視的問題,**如果使用不當,可能會造成很多無用空間的浪費,**網絡帶寬的浪費,代碼通用性較差等情況,需要綜合數 據通用性、空間占用比、代碼維護性三點進行取舍
- 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布隆過濾器
- 分布式布隆過濾器
- 開發規范
- 內存管理
- 開發運維常見坑
- 實戰
- 對文章進行投票
- 數據庫的概念
- 啟動多實例