如何在nestjs中使用redis客户端?

How to use redis client in nestjs?

我在 NestJs 中有一个微服务,这里是 main.ts 文件:

async function bootstrap() {
  const app = await NestFactory.createMicroservice<MicroserviceOptions>(AppModule, {
    transport: Transport.REDIS,
    options: {
      url: 'redis://localhost:6379',
    }
  })
  await app.listen();
  console.log('Redis is running');
}
bootstrap();

我想从服务调用 redis 数据库:

import { createClient } from '@redis/client';

async createWorkspaceShareCode(data: GetWorkspaceShareCodeMessage) {
    const client = createClient({
      url: 'redis://localhost:6379'
    });
    await client.connect();

    await client.set('key', 'value');
    const value = await client.get('key');
    return value;
  }

但这不是我想要的,这里有问题:

我会做的是保留您的 createMicroservice,因为它对于基于 Redis 的微服务服务器来说是必需的。然后你可以创建一个导出 redis 服务的模块,如下所示:

@Module({
  providers: [
    {
      provide: 'REDIS_OPTIONS',
      useValue: {
        url: 'redis://localhost:6379'
      }
    },
    {
      inject: ['REDIS_OPTIONS']
      provide: 'REDIS_CLIENT',
      useFactory: async (options: { url: string }) => {
        const client = createClient(options);
        await client.connect();
        return client;
      }
    }
  ],
  exports: ['REDIS_CLIENT'],
})
export class RedisModule {}

现在,在包含您要使用的服务的模块中,将 RedisModule 添加到 imports 数组,在该服务中,您可以执行 @Inject('REDIS_CLIENT') private readonly redis: Redis 来注入 redis 实例并使用它与 this.redis.get('key')this.redis.set('key', value)