Node Redis 小试

Redis 是一个高性能的 key-value 数据库,为了保证效率,数据都是缓存在内存中,在执行频繁而又复杂的数据库查询条件时,可使用 Redis 缓存一份查询结果,以提高应用性能。git

 

背景

若是一个 Node 应用有多台服务器或多个进程在跑,每一个进程都拥有本身的内存空间,各个进程之间的数据共享就显得很是重要。github

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

引入 Redis 能够解决数据共享的问题,也由于 Redis 是基于内存存储的特色,有着很是高的性能,能够大大下降数据库读写的压力,提高应用的总体性能。数据库

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

安装 Redis 客户端

在开始使用 redis 以前,首先须要安装 Redis 客户端缓存

以 MAC OS 为例,经过 brew 安装 Redisbash

brew install redis

启动 Redis服务器

redis-server

安装 ioredis NPM 模块

安装 ioredissession

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 的任务队列中而已。

相关文章
相关标签/搜索