nestjs的Redis模块
发布于 7 年前 作者 skunight 4973 次浏览 来自 分享

项目地址

nestjs-redis

Nestjs Redis

Redis component for NestJs.

Installation

Yarn

yarn add nestjs-redis

NPM

npm install nestjs-redis --save

Getting Started

Let’s register the RedisModule in app.module.ts

import { Module } from '@nestjs/common'
import { RedisModule} from 'nestjs-redis'
@Module({
 imports: [
 RedisModule.register(options)
 ],
})
export class AppModule {}

With Async

import { Module } from '@nestjs/common';
import { RedisModule} from 'nestjs-redis'
@Module({
 imports: [
 RedisModule.forRootAsync({
 useFactory: (configService: ConfigService) => configService.get('redis'), // or use async method
 //useFactory: async (configService: ConfigService) => configService.get('redis'),
 inject:[ConfigService]
 }),
 ],
})
export class AppModule {}

And the config file look like this With single client

export default {
 host: process.env.REDIS_HOST,
 port: parseInt(process.env.REDIS_PORT),
 db: parseInt(process.env.REDIS_DB),
 password: process.env.REDIS_PASSWORD,
 keyPrefix: process.env.REDIS_PRIFIX,
}

With multi client

export default [
 {
 name:'test1',
 host: process.env.REDIS_HOST,
 port: parseInt(process.env.REDIS_PORT),
 db: parseInt(process.env.REDIS_DB),
 password: process.env.REDIS_PASSWORD,
 keyPrefix: process.env.REDIS_PRIFIX,
 },
 {
 name:'test2',
 host: process.env.REDIS_HOST,
 port: parseInt(process.env.REDIS_PORT),
 db: parseInt(process.env.REDIS_DB),
 password: process.env.REDIS_PASSWORD,
 keyPrefix: process.env.REDIS_PRIFIX,
 },
]

And use in your service

import { Injectable } from '@nestjs/common';
import { RedisService } from 'nestjs-redis';
@Injectable()
export class TestService {
 constructor(
 private readonly redisService: RedisService,
 ) { }
 async root(): Promise<boolean> {
 const client = await this.redisService.getClient('test')
 return true
 }
}

Options

interface RedisOptions {
 /**
 * client name. default is a uuid, unique.
 */
 name?: string;
 port?: number;
 host?: string;
 /**
 * 4 (IPv4) or 6 (IPv6), Defaults to 4.
 */
 family?: number;
 /**
 * Local domain socket path. If set the port, host and family will be ignored.
 */
 path?: string;
 /**
 * TCP KeepAlive on the socket with a X ms delay before start. Set to a non-number value to disable keepAlive.
 */
 keepAlive?: number;
 connectionName?: string;
 /**
 * If set, client will send AUTH command with the value of this option when connected.
 */
 password?: string;
 /**
 * Database index to use.
 */
 db?: number;
 /**
 * When a connection is established to the Redis server, the server might still be loading
 * the database from disk. While loading, the server not respond to any commands.
 * To work around this, when this option is true, ioredis will check the status of the Redis server,
 * and when the Redis server is able to process commands, a ready event will be emitted.
 */
 enableReadyCheck?: boolean;
 keyPrefix?: string;
 /**
 * When the return value isn't a number, ioredis will stop trying to reconnect.
 * Fixed in: https://github.com/DefinitelyTyped/DefinitelyTyped/pull/15858
 */
 retryStrategy?(times: number): number | false;
 /**
 * By default, all pending commands will be flushed with an error every
 * 20 retry attempts. That makes sure commands won't wait forever when
 * the connection is down. You can change this behavior by setting
 * `maxRetriesPerRequest`.
 *
 * Set maxRetriesPerRequest to `null` to disable this behavior, and
 * every command will wait forever until the connection is alive again
 * (which is the default behavior before ioredis v4).
 */
 maxRetriesPerRequest?: number | null;
 /**
 * 1/true means reconnect, 2 means reconnect and resend failed command. Returning false will ignore
 * the error and do nothing.
 */
 reconnectOnError?(error: Error): boolean | 1 | 2;
 /**
 * By default, if there is no active connection to the Redis server, commands are added to a queue
 * and are executed once the connection is "ready" (when enableReadyCheck is true, "ready" means
 * the Redis server has loaded the database from disk, otherwise means the connection to the Redis
 * server has been established). If this option is false, when execute the command when the connection
 * isn't ready, an error will be returned.
 */
 enableOfflineQueue?: boolean;
 /**
 * The milliseconds before a timeout occurs during the initial connection to the Redis server.
 * default: 10000.
 */
 connectTimeout?: number;
 /**
 * After reconnected, if the previous connection was in the subscriber mode, client will auto re-subscribe these channels.
 * default: true.
 */
 autoResubscribe?: boolean;
 /**
 * If true, client will resend unfulfilled commands(e.g. block commands) in the previous connection when reconnected.
 * default: true.
 */
 autoResendUnfulfilledCommands?: boolean;
 lazyConnect?: boolean;
 tls?: tls.ConnectionOptions;
 sentinels?: Array<{ host: string; port: number; }>;
 name?: string;
 /**
 * Enable READONLY mode for the connection. Only available for cluster mode.
 * default: false.
 */
 readOnly?: boolean;
 /**
 * If you are using the hiredis parser, it's highly recommended to enable this option.
 * Create another instance with dropBufferSupport disabled for other commands that you want to return binary instead of string
 */
 dropBufferSupport?: boolean;
 /**
 * Whether to show a friendly error stack. Will decrease the performance significantly.
 */
 showFriendlyErrorStack?: boolean;
}

That’s it!

3 回复

666 支持 redis 哨兵模式吗?

redis模块用的是ioredis,集群配置暂时没有加

sentinels 这个是没有加上吗

回到顶部

AltStyle によって変換されたページ (->オリジナル) /