import { createClient, RedisClientType } from 'redis'; import { REDIS_URL } from '../config/env.config'; let redisClient: RedisClientType; export async function initializeRedis() { redisClient = createClient({ url: REDIS_URL || 'redis://localhost:6379', socket: { reconnectStrategy: (retries) => { if (retries > 10) return new Error('Redis reconnect limit exceeded'); return Math.min(retries * 100, 3000); } } }); redisClient.on('error', (err) => console.error('Redis Client Error', err)); redisClient.on('connect', () => console.log('Redis Client Connected')); redisClient.on('reconnecting', () => console.log('Redis Client Reconnecting...')); redisClient.on('ready', () => console.log('Redis Client Ready')); redisClient.on('end', () => console.log('Redis Client Connection Ended')); await redisClient.connect(); return redisClient; } export async function getRedisClient(): Promise { if (!redisClient) { throw new Error('Redis client not initialized'); } // Check if client is ready, if not try to reconnect if (!redisClient.isReady) { console.log('Redis client not ready, attempting to reconnect...'); try { await redisClient.connect(); } catch (err) { console.error('Failed to reconnect Redis client:', err); throw new Error('Redis client is not ready and reconnection failed'); } } return redisClient; }