| 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<RedisClientType> { |
| if (!redisClient) { |
| throw new Error('Redis client not initialized'); |
| } |
|
|
| |
| 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; |
| } |