59 lines
1.4 KiB
JavaScript
59 lines
1.4 KiB
JavaScript
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,
|
|
};
|