Lianer

背景

如果一个 Node 应用有多台服务器或多个进程在跑,每个进程都拥有自己的内存空间,各个进程之间的数据共享就显得非常重要。

使用数据库是一个解决数据共享的方案,但一些临时性、高并发的数据并不太适合直接写入数据库,比如 session。

引入 Redis 可以解决数据共享的问题,也因为 Redis 是基于内存存储的特点,有着非常高的性能,可以大大降低数据库读写的压力,提升应用的整体性能。

Redis 还可以用来:缓存复杂的数据库查询结果,做自增长统计,暂存用户操作状态等功能。

安装 Redis 客户端

在开始使用 redis 之前,首先需要安装 Redis 客户端

以 MAC OS 为例,通过 brew 安装 Redis

brew install redis

启动 Redis

redis-server

安装 ioredis NPM 模块

安装 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)

结果:

1
null

刚开始使用 redis 的时候很困惑,为什么 JAVA 调用 Redis 的语法看起来是同步的,到了 Node 就成了异步的呢,会不会存在什么逻辑问题?

事实上,Node 调用 Redis 确实是异步的,只不过因为 Redis 是单线程的特点,任何操作都是原子操作。

在小试的代码中,redis.set redis.get 都只是向 Redis 发送了一个通知,添加到了 Redis 的任务队列中而已。