@ fastify/ redis (中文(简体) )
Fastify Redis 连接插件; 通过此程序, 您可以在服务器的每个部分共享相同的 Redis 连接 .
安装
npm i @fastify/redis
兼容性
| 插件版本 | 快速化版本 |
|---|---|
>=7.x | ^5.x |
^6.x | ^4.x |
>=4.x <6.x | ^3.x |
^3.x | ^2.x |
>=1.x <3.x | ^1.x |
请注意,如果一个快取版本没有支持,那么该插件的相应版本也一样 上表列出. 见 快速化 LTS 政策 更多细节.
使用量
添加到您的项目中 register 你们就完了!
创建新的 Redis 客户端
在车盖下 雄风 用作客户端,该 options 你传递给 register 将传递给雷迪斯客户端.
const fastify = require('fastify')()
// create by specifying host
fastify.register(require('@fastify/redis'), { host: '127.0.0.1' })
// OR by specifying Redis URL
fastify.register(require('@fastify/redis'), { url: 'redis://127.0.0.1', /* other redis options */ })
// OR with more options
fastify.register(require('@fastify/redis'), {
host: '127.0.0.1',
password: '***',
port: 6379, // Redis port
family: 4 // 4 (IPv4) or 6 (IPv6)
})
访问 Redis 客户端
一旦您注册了您的插件, 您可以通过 fastify.redis。 。 。 .
结格后客户端自动关闭.
'use strict'
const Fastify = require('fastify')
const fastifyRedis = require('@fastify/redis')
const fastify = Fastify({ logger: true })
fastify.register(fastifyRedis, {
host: '127.0.0.1',
password: 'your strong password here',
port: 6379, // Redis port
family: 4 // 4 (IPv4) or 6 (IPv6)
})
fastify.get('/foo', (req, reply) => {
const { redis } = fastify
redis.get(req.query.key, (err, val) => {
reply.send(err || val)
})
})
fastify.post('/foo', (req, reply) => {
const { redis } = fastify
redis.set(req.body.key, req.body.value, (err) => {
reply.send(err || { status: 'ok' })
})
})
fastify.listen({ port: 3000 }, err => {
if (err) throw err
console.log(`server listening on ${fastify.server.address().port}`)
})
使用已有的 Redis 客户端
您也可提供已有的 重写 通过传递选项实现客户端实例
对象与 client 属性设置为实例 。 在这种情况下,
当快捷实例出现时,客户端不会自动关闭
关闭.
'use strict'
const fastify = require('fastify')()
const Redis = require('ioredis')
const client = new Redis({ host: 'localhost', port: 6379 })
fastify.register(require('@fastify/redis'), { client })
您也可提供 Redis 集群 实例给客户端:
'use strict'
const fastify = require('fastify')()
const Redis = require('ioredis')
const client = new Redis.Cluster([{ host: 'localhost', port: 6379 }]);
fastify.register(require('@fastify/redis'), { client })
注:默认情况下, @ fastify/ redis (中文(简体) ) 将 没有 自动关闭客户端 当快捷服务器关闭时连接 .
要自动关闭客户端连接, 请设置客户端 Close to true.
fastify.register(require('@fastify/redis'), { client, closeClient: true })
注册多个 Redis 客户端
通过使用 namespace 选项,您可以注册多个 Redis 客户端实例.
'use strict'
const fastify = require('fastify')()
fastify
.register(require('@fastify/redis'), {
host: '127.0.0.1',
port: 6380,
namespace: 'hello'
})
.register(require('@fastify/redis'), {
client: redis,
namespace: 'world'
})
// Here we will use the `hello` named instance
fastify.get('/hello', (req, reply) => {
const { redis } = fastify
redis.hello.get(req.query.key, (err, val) => {
reply.send(err || val)
})
})
fastify.post('/hello', (req, reply) => {
const { redis } = fastify
redis['hello'].set(req.body.key, req.body.value, (err) => {
reply.send(err || { status: 'ok' })
})
})
// Here we will use the `world` named instance
fastify.get('/world', (req, reply) => {
const { redis } = fastify
redis['world'].get(req.query.key, (err, val) => {
reply.send(err || val)
})
})
fastify.post('/world', (req, reply) => {
const { redis } = fastify
redis.world.set(req.body.key, req.body.value, (err) => {
reply.send(err || { status: 'ok' })
})
})
fastify.listen({ port: 3000 }, function (err) {
if (err) {
fastify.log.error(err)
process.exit(1)
}
})
Redis 流( 需要5. 0 以上)
@fastify/redis 支持 Redis 流出框中.
'use strict'
const fastify = require('fastify')()
fastify.register(require('@fastify/redis'), {
host: '127.0.0.1',
port: 6380
})
fastify.get('/streams', async (request, reply) => {
// We write an event to the stream 'my awesome fastify stream name', setting 'key' to 'value'
await fastify.redis.xadd(['my awesome fastify stream name', '*', 'hello', 'fastify is awesome'])
// We read events from the beginning of the stream called 'my awesome fastify stream name'
let redisStream = await fastify.redis.xread(['STREAMS', 'my awesome fastify stream name', 0])
// We parse the results
let response = []
let events = redisStream[0][1]
for (let i = 0; i < events.length; i++) {
const e = events[i]
response.push(`#LOG: id is ${e[0].toString()}`)
// We log each key
for (const key in e[1]) {
response.push(e[1][key].toString())
}
}
reply.status(200)
return { output: response }
// Will return something like this :
// { "output": ["#LOG: id is 1559985742035-0", "hello", "fastify is awesome"] }
})
fastify.listen({ port: 3000 }, function (err) {
if (err) {
fastify.log.error(err)
process.exit(1)
}
})
Redis 连接出错
大部分错误都因为 ioredis 静态错误处理, 但在插件注册期间, 它会检查与 redis 实例的连接是否正确稳定 .
在这种情况下,你可以接受 ERR_AVVIO_PLUGIN_TIMEOUT 如果连接无法在预期的时间框架内建立,或者一个无效连接的专用错误,则错误.
承认
这个项目由下列各方慷慨赞助:
过去提案国:
- 莱兹
许可证
许可证根据 麻省理工学院。 。 。 .