跳转至

NEST REDIS 模块

liaoliaots/nestjs-redis

关于该项目

特征

  • Both redis & cluster are supported: You can also specify multiple instances.
  • Health: Checks health of redis & cluster server.
  • Rigorously tested: With 100+ tests and 100% code coverage.
  • Decorators: Injects redis & cluster clients via @InjectRedis(), @InjectCluster().
  • Services: Retrieves redis & cluster clients via RedisService, ClusterService.
  • Testing: Generates an injection token via getRedisToken, getClusterToken.

入门

先决条件

This lib requires Node.js >=12.22.0, NestJS ^9.0.0, ioredis ^5.0.0.

  • If you depend on ioredis 4, please use version 7 of the lib.
  • If you depend on ioredis 5, NestJS 7 or 8, please use version 8 of the lib.

安装

1
2
3
4
5
6
# with npm
npm install @liaoliaots/nestjs-redis ioredis
# with yarn
yarn add @liaoliaots/nestjs-redis ioredis
# with pnpm
pnpm add @liaoliaots/nestjs-redis ioredis

用法

遗产

常见问题解答

循环依赖性 ⚠️

A circular dependency might also be caused when using "barrel files"/index.ts files to group imports. Barrel files should be omitted when it comes to module/provider classes. For example, barrel files should not be used when importing files within the same directory as the barrel file, i.e. cats/cats.controller should not import cats to import the cats/cats.service file. For more details please also see this github issue.

"Cannot resolve dependency" error

If you encountered an error like this:

1
2
3
4
5
6
7
8
Nest can't resolve dependencies of the <provider> (?). Please make sure that the argument <unknown_token> at index [<index>] is available in the <module> context.

Potential solutions:
- If <unknown_token> is a provider, is it part of the current <module>?
- If <unknown_token> is exported from a separate @Module, is that module imported within <module>?
  @Module({
    imports: [ /* the Module containing <unknown_token> */ ]
  })

Please make sure that the RedisModule is added directly to the imports array of @Module() decorator of "Root Module"(if isGlobal is true) or "Feature Module"(if isGlobal is false).

代码示例:

redis-config.service.ts
import { Injectable } from '@nestjs/common';
import {
  RedisModuleOptions,
  RedisOptionsFactory,
} from '@liaoliaots/nestjs-redis';

@Injectable()
export class RedisConfigService implements RedisOptionsFactory {
  createRedisOptions(): RedisModuleOptions {
    return {
      readyLog: true,
      config: {
        host: 'localhost',
        port: 6379,
        password: 'authpassword',
      },
    };
  }
}
app.module.ts
import { Module } from '@nestjs/common';
import { RedisModule } from '@liaoliaots/nestjs-redis';
import { RedisConfigService } from './redis-config.service';

@Module({
  imports: [
    RedisModule.forRootAsync({
      useClass: RedisConfigService,
    }),
  ],
})
export class AppModule {}
my-redis.module.ts
import { Module } from '@nestjs/common';
import { RedisModule } from '@liaoliaots/nestjs-redis';
import { RedisConfigService } from './redis-config.service';

@Module({
  imports: [
    RedisModule.forRootAsync({
      useClass: RedisConfigService,
    }),
  ],
})
export class MyRedisModule {}
app.module.ts
1
2
3
4
5
6
7
import { Module } from '@nestjs/common';
import { MyRedisModule } from './my-redis.module';

@Module({
  imports: [MyRedisModule],
})
export class AppModule {}

测试覆盖范围

Statements Branches Functions Lines
Statements Branches Functions Lines