const { createClient } = require('redis'); const { redisUrl } = require('./config'); const { logger } = require('../util/logger'); const client = createClient({ url: redisUrl, socket: { reconnectStrategy: (retries) => { const delay = Math.min(retries * 100, 5000); logger.info(`Redis reconnecting attempt ${retries}, delay ${delay}ms`); return delay; }, }, }); client.on('connect', () => logger.info('Connected to redis')); client.on('error', (err) => logger.error(err, 'Redis error')); client.on('ready', () => logger.info('Redis client ready')); client.on('end', () => logger.info('Redis connection closed')); client .connect() .catch((err) => logger.error(err, 'Failed to connect to Redis')); // Helper functions async function setJson(key, value, ttl = null) { try { const jsonValue = JSON.stringify(value); if (ttl) { return await client.set(key, jsonValue, { EX: ttl }); } return await client.set(key, jsonValue); } catch (err) { logger.error(err, 'Redis setJson error'); throw err; } } async function getJson(key) { try { const value = await client.get(key); return value ? JSON.parse(value) : null; } catch (err) { logger.error(err, 'Redis getJson error'); throw err; } } process.on('SIGTERM', async () => { logger.info('SIGTERM received - closing Redis connection'); await client.quit(); }); module.exports = { client, getJson, setJson, };