UNPKG

@tomei/sso

Version:
76 lines (67 loc) 2.04 kB
import { createClient } from 'redis'; export class RedisService { private static client; private constructor() {} static async init(client?: any): Promise<RedisService> { if (!client) { if (!RedisService.client) { // Create a new Redis client const host = process.env.REDIS_HOST; const password = process.env.REDIS_PASS; const port = process.env.REDIS_PORT; const isProduction = process.env.REDIS_HOST.includes('windows.net'); const redis = isProduction ? 'rediss' : 'redis'; const pass = password ? `:${password}@` : ''; console.log(`${redis}://${pass}${host}:${port}`); RedisService.client = client = createClient({ url: `${redis}://${pass}${host}:${port}`, password: password, }); RedisService.client.on('error', (error) => { console.error('Redis error:', error); }); RedisService.client.on('connect', () => console.log('Redis connected')); RedisService.client.on('reconnecting', () => console.log('Redis reconnecting'), ); await RedisService.client.connect(); } } else { RedisService.client = client; } return new RedisService(); } public async set( key: string, value: any, expire: number = 3600 * 24 * 1, ): Promise<void> { try { const newList = typeof value === 'string' ? value : JSON.stringify(value); await RedisService.client.setEx(key, expire, newList); } catch (error) { console.log(error); } } public async get(key: string): Promise<null> { try { return await RedisService.client.get(key); } catch (error) { throw error; } } public async del(key: string): Promise<void> { try { await RedisService.client.del(key); } catch (error) { throw error; } } public static async close(): Promise<void> { try { await RedisService.client.disconnect(); } catch (error) { throw error; } } }