### “缓存粒度”概念说明
* 例如现在需要将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开销更大。
* **代码维护**:全部数据的优势更加明显,而部分数据一旦要加新字段需要修改业务代码,而且修改后通常还需要刷新缓存数据
* **下图给出缓存全部数据和部分数据在通用性、空间占用、代码维护上的对比:**
![](https://img.kancloud.cn/2e/50/2e50419f1163162f20f376725aa3d02d_808x135.png)
* 缓存粒度问题是一个容易被忽视的问题,**如果使用不当,可能会造成很多无用空间的浪费,**网络带宽的浪费,代码通用性较差等情况,需要综合数 据通用性、空间占用比、代码维护性三点进行取舍
- 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布隆过滤器
- 分布式布隆过滤器
- 开发规范
- 内存管理
- 开发运维常见坑
- 实战
- 对文章进行投票
- 数据库的概念
- 启动多实例