## Redis快的原因
1. 纯内存访问
2. 非阻塞I/O,适用epoll作为I/O多路复用的实现
3. 单线程避免了线程切换
## Redis常用的数据类型和使用场景
### **String**
![](https://box.kancloud.cn/fb06552a148cef2c0b4c4cf1f84a13a3_696x383.png)
**特点**
* 最常用
* value支持字符串,数字,二进制
* 最大值不能大于512MB
**适用场景**
* web架构中充当缓存层 - 提高访问性能保护存储层
* 计数 - 统计数据并异步保存到存储层
* 共享session - 对集群架构的服务器提供共享session支持
* 限速 - 通过指定缓存的有效期,限制例如获取验证码的请求频率
### **Hash**
![](https://box.kancloud.cn/56661ce136fe84a101e32d6d615dcc37_685x471.png)
**特点**
* 相比关系型数据库,Hash类型的每个key可以有不一样的field,但是不支持复杂查询
**适用场景**
* 保存用户信息
### **列表**
![](https://box.kancloud.cn/c40c8d16a60be48269207b41e9a7eff7_694x643.png)
**特点**
* 元素 有序(支持指定下标),可重复,支持字符串,hash,数量上限是2^32-1
* 支持头尾两端的插入(push)弹出(pop),或者指定下标获取元素
**适用场景**
* 消息队列 - 生产者 & 队列 & 多个消费者
* 文章列表 - 使用hash保存用户文章的title,content,然后作为元素push到队列
### **集合**
![](https://box.kancloud.cn/accf60c081eb06c88d6fc0089147376a_701x309.png)
**特点**
* 无序,不可重复
* 元素数量上限2^32-1
**适用场景**
* 设置用户标签
### **有序集合**
![](https://box.kancloud.cn/0279c12f1e9c1db11dc39f5167541eff_698x364.png)
**特点**
* 元素不可重复,但score可重复;有序(通过score列实现)
**适用场景**
* 排行榜系统 - eg:zadd user:ranking:2016_03_15 mike 3
## 事务
## 持久化数据