File size: 1,441 Bytes
9a92a42 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | 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');
}
// 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;
} |