import { promisify } from 'util' import { OnModuleInit, Injectable } from '@nestjs/common' import { debug, Debugger } from 'debug' import { createClient, RedisClient } from 'redis' @Injectable() export class RedisService implements OnModuleInit { private _debug: Debugger = debug('services').extend('redis') private _client: RedisClient private get isActive(): boolean { return globalThis.secret.redis.enable } onModuleInit(): void { this._client = createClient({ url: globalThis.secret.redis.url, }) this._client.on('error', error => this._debug(error.message)) } async set(key: string, value: string): Promise { if (!this.isActive) return const setAsync = promisify(this._client.set).bind(this._client) return setAsync(key, value) } async get(key: string): Promise { if (!this.isActive) return const getAsync = promisify(this._client.get).bind(this._client) return getAsync(key) } }