nakama/backend/utils/redis.js

98 lines
2.1 KiB
JavaScript
Raw Normal View History

2025-11-03 20:35:01 +00:00
const redis = require('redis');
let client = null;
let isConnected = false;
// Инициализация Redis (опционально)
async function initRedis() {
try {
if (process.env.REDIS_URL) {
client = redis.createClient({
url: process.env.REDIS_URL
});
client.on('error', (err) => {
console.log('Redis Client Error', err);
isConnected = false;
});
client.on('connect', () => {
console.log('✅ Redis подключен');
isConnected = true;
});
await client.connect();
} else {
console.log('⚠️ Redis URL не найден, кэширование отключено');
}
} catch (error) {
console.error('⚠️ Ошибка подключения Redis:', error);
isConnected = false;
}
}
// Получить значение
async function get(key) {
if (!isConnected || !client) return null;
try {
const value = await client.get(key);
return value ? JSON.parse(value) : null;
} catch (error) {
console.error('Redis get error:', error);
return null;
}
}
// Установить значение с TTL
async function set(key, value, ttl = 3600) {
if (!isConnected || !client) return false;
try {
await client.setEx(key, ttl, JSON.stringify(value));
return true;
} catch (error) {
console.error('Redis set error:', error);
return false;
}
}
// Удалить значение
async function del(key) {
if (!isConnected || !client) return false;
try {
await client.del(key);
return true;
} catch (error) {
console.error('Redis del error:', error);
return false;
}
}
// Очистить паттерн ключей
async function clearPattern(pattern) {
if (!isConnected || !client) return false;
try {
const keys = await client.keys(pattern);
if (keys.length > 0) {
await client.del(keys);
}
return true;
} catch (error) {
console.error('Redis clearPattern error:', error);
return false;
}
}
module.exports = {
initRedis,
get,
set,
del,
clearPattern,
isConnected: () => isConnected
};