98 lines
2.1 KiB
JavaScript
98 lines
2.1 KiB
JavaScript
|
|
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
|
|||
|
|
};
|
|||
|
|
|