auth-service/src/infra/redis/redis.service.ts

70 lines
1.6 KiB
TypeScript

import {
Injectable,
Logger,
OnModuleDestroy,
OnModuleInit
} from '@nestjs/common'
import { ConfigService } from '@nestjs/config'
import Redis from 'ioredis'
import { AllConfigs } from '@/config'
@Injectable()
export class RedisService
extends Redis
implements OnModuleInit, OnModuleDestroy
{
private readonly logger = new Logger(RedisService.name)
public constructor(
private readonly configService: ConfigService<AllConfigs>
) {
super({
username: configService.get('redis.username', { infer: true }),
host: configService.get('redis.host', { infer: true }),
port: configService.get('redis.port', { infer: true }),
password: configService.get('redis.password', { infer: true }),
db: parseInt(configService.get('redis.db', { infer: true }),),
maxRetriesPerRequest: 5,
enableOfflineQueue: true
})
}
public onModuleInit() {
const start = Date.now()
this.on('connect', () => {
this.logger.log('Redis connecting...')
})
this.on('ready', () => {
this.logger.log(`Redis connected in ${Date.now() - start}ms`)
})
this.on('error', e => {
this.logger.error('Redis connection error', {
error: e.message || e
})
})
this.on('close', () => {
this.logger.warn('Redis connection closed')
})
this.on('reconnecting', () => {
this.logger.log('Redis reconnecting')
})
}
public async onModuleDestroy() {
this.logger.log('Redis disconnecting...')
try {
await this.quit()
this.logger.log('Redis disconnected')
} catch (e) {
this.logger.error('Redis disconnecting error', e)
}
}
}