Redis
这里介绍如何快速在 Midway 中使用 Redis。
安装依赖#
@midwayjs/redis 是主要的功能包,@types/ioredis 是 定义包。
$ npm i @midwayjs/redis --save$ npm i @types/ioredis --save-dev // 安装到 dev 依赖如果发现 RedisService 没有方法定义,请务必检查此项。
引入组件#
首先,引入 组件,在 src/configuration.ts 中导入:
import { Configuration } from '@midwayjs/decorator';import * as redis from '@midwayjs/redis';import { join } from 'path';
@Configuration({ imports: [ redis, // 导入 redis 组件 ], importConfigs: [join(__dirname, 'config')],})export class ContainerLifeCycle {}配置 Redis#
比如:
单客户端配置
// src/config.default
// Single Redisexport const redis = { client: { port: 6379, // Redis port host: '127.0.0.1', // Redis host password: 'auth', db: 0, },};Sentinel 配置
export const redis = { client: { sentinels: [ { // Sentinel instances port: 26379, // Sentinel port host: '127.0.0.1', // Sentinel host }, ], name: 'mymaster', // Master name password: 'auth', db: 0, },};Cluster 模式配置,需要配置多个
// Cluster Redisexport const redis = { client: { cluster: true, nodes: [{ host: 'host', port: 'port', password: 'password', db: 'db', },{ host: 'host', port: 'port', password: 'password', db: 'db', }, }};
多个客户端配置,需要配置多个
// Multi Redisexport const redis = { clients: { instance1: { host: 'host', port: 'port', password: 'password', db: 'db', }, instance2: { host: 'host', port: 'port', password: 'password', db: 'db', }, },};更多参数可以查看 ioredis 文档。
使用 Redis 服务#
我们可以在任意的代码中注入使用。
import { Provide, Controller, Inject, Get } from '@midwayjs/decorator';import { RedisService } from '@midwayjs/redis';
@Provide()export class UserService { @Inject() redisService: RedisService;
async invoke() { await this.redisService.set('foo', 'bar'); const result = await this.redisService.get('foo');
// result => bar }}
可以使用 RedisServiceFactory 获取不同的实例。
import { RedisServiceFactory } from '@midwayjs/redis';import { join } from 'path';
@Provide()export class UserService { @Inject() redisServiceFactory: RedisServiceFactory;
async save() { const redis1 = await this.redisServiceFactory.get('instance1'); const redis2 = await this.redisServiceFactory.get('instance3');
//... }}