Node.js 连接操作 Redis
一、简单示例
初始化项目:
npm init -y
安装 node-redis:
npm i redis --save
新建 index.js
:
- 一般写法
- 用 await 改写
const redis = require('redis')
// 创建客户端
const redisClient = redis.createClient(6379, '127.0.0.1')
// 监听错误信息
redisClient.on('err', err => {
console.error(err)
})
// 连接
redisClient.connect().then(() => {
// 操作键值对
redisClient.set('name', 'dorki').then(val => {
console.log(val)
})
redisClient.get('name').then(val => {
console.log(val)
})
})
// 断开连接
redisClient.quit()
运行:
node index.js
效果如下:
const redis = require('redis');
(async function () {
// 创建客户端
const redisClient = redis.createClient(6379, '127.0.0.1')
// 连接
await redisClient.connect()
.then(() => console.log('Redis connect success.'))
.catch(console.error)
// 操作键值对
await redisClient.set('name', 'dorki')
const name = await redisClient.get('name')
console.log('name', name)
// 断开连接
redisClient.quit()
})()
运行:
node index.js
效果如下:
二、Node.js 连接操作 Redis
注意 node-redis v4 跟之前的版本有所区别:
1、连接
- v4
- < v4
const redis = require('redis')
// 创建客户端
const redisClient = redis.createClient(6379, '127.0.0.1')
// 监听错误信息
redisClient.on('err', err => {
console.error(err)
})
// 连接
redisClient.connect()
用 await 改写如下:
const redis = require('redis');
(async function () {
// 创建客户端
const redisClient = redis.createClient(6379, '127.0.0.1')
// 连接
await redisClient.connect()
.then(() => console.log('Redis connect success.'))
.catch(console.error)
})()
const redis = require('redis')
// 创建客户端
const redisClient = redis.createClient('6379', '127.0.0.1')
// 监听错误信息
redisClient.on('error', err => {
console.error(err)
})
2、写入数据
- v4
- < v4
v4 的写法在 client.connect
连接成功后再执行 set
操作:
// ...
// 连接
redisClient.connect().then(() => {
redisClient.set('name', 'dorki').then(val => {
console.log(val)
})
})
用 await 改写如下:
// ...
(async function () {
// ...
// 连接
await redisClient.connect()
.then(() => console.log('Redis connect success.'))
.catch(console.error)
// 写入数据
await redisClient.set('name', 'dorki') // 返回值为 OK
})()
SET 的第三个参数 redis.print
是打印方法,在执行完命令后控制台会打印一条信息。
例如执行成功时,会打印 Reply: OK
redisClient.set('name', 'dorki', redis.print)
3、读取数据
- v4
- < v4
v4 的写法在 client.connect
连接成功后再执行 get
操作:
// ...
// 连接
redisClient.connect().then(() => {
redisClient.get('name').then(val => {
console.log(val) // 查找到则返回对应的值,查找不到则返回 null
})
})
用 await 改写如下:
// ...
(async function () {
// ...
// 连接
await redisClient.connect()
.then(() => console.log('Redis connect success.'))
.catch(console.error)
// 读取数据
const name = await redisClient.get('name')
console.log('name', name)
})()
redisClient.get('name', (err, val) => {
if (err) {
console.error(err)
return
}
console.log(val)
})
4、删除数据
- v4
- < v4
v4 的写法在 client.connect
连接成功后再执行 del
操作:
// ...
// 连接
redisClient.connect().then(() => {
redisClient.del('name').then(val => {
console.log(val) // 删除成功返回 1,删除失败返回 0
})
})
用 await 改写如下:
// ...
(async function () {
// ...
// 连接
await redisClient.connect()
.then(() => console.log('Redis connect success.'))
.catch(console.error)
// 删除数据
await redisClient.del('name') // 返回值为 0 或 1
})()
redisClient.del('name', (err, val) => {
if (err) {
console.error(err)
return
}
console.log(val)
})
5、断开连接
- v4
- < v4
v4 的写法在 client.connect
连接成功后再执行 quit
操作:
// ...
// 连接
redisClient.connect().then(() => {
redisClient.quit()
})
用 await 改写如下:
// ...
(async function () {
// ...
// 连接
await redisClient.connect()
.then(() => console.log('Redis connect success.'))
.catch(console.error)
// 断开连接
redisClient.quit()
})()
redisClient.quit()
三、Express 操作 Redis 存储 Session
Express 中可以使用 connect-redis 中间件来快速将 Session 数据存入 Redis,不需要额外封装设置和读取 Redis 数据的函数。