Prashikshak / API /src /util /redis.util.ts
Abhisingh-18's picture
Initial commit: Prashikshak - disaster management training platform
9a92a42
Raw
History Blame Contribute Delete
1.44 kB
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;
}