Redis（Remote Dictionary Server)，是一种充分利用内存的数据库。

相比传统硬盘数据库，redis的性能要高出更多。在传统服务器开发中很常见。

现在，uniCloud终于原生支持Redis了！

为了保证效率，数据都是缓存在内存中，同时redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件，并且在此基础上实现了master-slave(主从)同步，即使宕机，也可以把    数据恢复过来。所以redis即做到了高性能又实现了持久化存储。
它是key-value存储系统，支持存储的value类型较多，包括：string(字符串)、list(链表)、set(集合)、sorted set 和hash（哈希类型）[详情](uniCloud/redis?id=data-type)


### 为什么要使用Redis
mongoDB数据存储在磁盘里，对数据有强一致需求、持久存储需求的项目需要选择mongoDB。但是mongoDB支持并发访问的能力有限，当有大量并发请求的时候，mongoDB会挂掉。另外，有时候，我们需要更快的响应速度，而mongoDB速度有限，不能满足需求。所以我们需要内存型数据库Redis。

## 常用应用场景
- 频繁无意义的查库
假如你的应用有5千万条新闻数据，这类数据不经常变化。页面用固定的查询条件获取并显示这些数据；每个用户每次打开页面的时候，都是通过数据库执行查询语句获取数据。显然这样的效率非常低且浪费资源，更高效的做法是把它加入缓存，每次取数前先从缓存取值，如果取不到数据，再去请求数据库。并将数据加入缓存，下一个用户就能直接从缓存中读取，使得请求能够迅速响应。
- 高并发，短期高频访问的数据
比如热点数据，秒杀等高并发场景。直接使用mongoDB会遇到性能的瓶颈，所有的请求直接访问数据库，数据库会出现连接异常。此时我们也应当使用缓存作为中间件，redis做一个缓冲操作，让请求先访问到redis，而不是直接访问数据库。
- 排行问题
常见的排行问题，例如最热话题、游戏排名等等。使用mongoDB数据库查询都非常消耗资源，这些都可以通过Redis来轻松实现，直接使用ZRank即可得到。
- 删除过期数据
Redis不是真正意义上的可持久化数据库，可以给数据加上一个有效时间，在有效时间超过时，Redis会自动删除对应数据。

其他还有：计数器、消息队列推送、好友关注、粉丝数等这里就不一一列举

## 注意
虽然Redis的优势明显，但是我们仍然不可用Redis完全替代mongoDB；推荐：mongoDB+redis组合使用。
- redis存储在内存中，mongoDB存储在硬盘。内存比硬盘贵，要存储大量数据，只能花更多的钱去购买内存，造成在一些不需要高性能的地方是相对比较浪费的，所以应当在需要高性能的地方使用redis，在不需要高性能的地方使用mongoDB，好钢用在刀刃上。
- 无法存储复杂的数据结构，redis的主要数据结构有string, hash ,set ,list和 sorted set,，底层还是key-value结构，无法存储表之间有强关联的数据。没有mongoDB那样支持丰富的查询语法。
- redis虽说支持持久化存储，但它是异步持久化，极端情况下（如：断电）存在丢数据的可能性；改同步的话性能就没有了。所以对数据有强一致需求仍然需要使用mongoDB