nakama/backend/utils/redis.js

98 lines
2.1 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
};