70 lines
1.6 KiB
TypeScript
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)
|
|
}
|
|
}
|
|
}
|