若是一个 Node 应用有多台服务器或多个进程在跑,每一个进程都拥有本身的内存空间,各个进程之间的数据共享就显得很是重要。git
使用数据库是一个解决数据共享的方案,但一些临时性、高并发的数据并不太适合直接写入数据库,好比 session。github
引入 Redis 能够解决数据共享的问题,也由于 Redis 是基于内存存储的特色,有着很是高的性能,能够大大下降数据库读写的压力,提高应用的总体性能。redis
Redis 还能够用来:缓存复杂的数据库查询结果,作自增加统计,暂存用户操做状态等功能。数据库
在开始使用 redis 以前,首先须要安装 Redis 客户端npm
以 MAC OS 为例,经过 brew 安装 Redis缓存
brew install redis
启动 Redisbash
redis-server
安装 ioredis服务器
npm install ioredis
var Redis = require('ioredis') var redis = new Redis() redis.set('test-redis-expire', 1) // 设置过时时间 3s redis.expire('test-redis-expire', 3) redis.get('test-redis-expire', (err, value) => { console.log(value) }) setTimeout(() => { redis.get('test-redis-expire', (err, value) => { console.log(value) }) }, 5000)
结果:session
1 null
刚开始使用 redis 的时候很困惑,为何 JAVA 调用 Redis 的语法看起来是同步的,到了 Node 就成了异步的呢,会不会存在什么逻辑问题?并发
事实上,Node 调用 Redis 确实是异步的,只不过由于 Redis 是单线程的特色,任何操做都是原子操做。
在小试的代码中,redis.set
redis.get
都只是向 Redis 发送了一个通知,添加到了 Redis 的任务队列中而已。