import { Module, Global } from '@nestjs/common'; import { ConfigModule, ConfigService } from '@nestjs/config'; import Redis from 'ioredis'; import { RedisService } from './redis.service'; export const REDIS_CLIENT = Symbol('REDIS_CLIENT'); @Global() @Module({ imports: [ConfigModule], providers: [ { provide: REDIS_CLIENT, useFactory: (configService: ConfigService) => { return new Redis({ host: configService.get('REDIS_HOST', 'localhost'), port: configService.get('REDIS_PORT', 6379), password: configService.get('REDIS_PASSWORD') || undefined, db: configService.get('REDIS_DB', 0), retryStrategy: (times) => { const delay = Math.min(times * 50, 2000); return delay; }, maxRetriesPerRequest: 3, }); }, inject: [ConfigService], }, RedisService, ], exports: [RedisService, REDIS_CLIENT], }) export class RedisModule {}