@tasolutions/express-core
Version:
All libs for express
102 lines (90 loc) • 3.35 kB
JavaScript
;
const { Redis } = require('ioredis');
const { redisInfo } = require('../config');
// Biến để lưu trữ instance Redis
let redisInstance;
class RedisService {
constructor() {
if (!redisInstance) {
// Chỉ khởi tạo Redis nếu enable là true
if (redisInfo.enable === 'true') {
const options = {
host: redisInfo.host,
port: Number(redisInfo.port),
password: redisInfo.pass,
db: Number(redisInfo.db) || 0,
};
console.log('[RedisService] options:', options);
redisInstance = new Redis(options);
// Kiểm tra kết nối
redisInstance.on('connect', () => {
console.log('Connected to Redis');
});
redisInstance.on('error', (err) => {
console.error('Redis error:', err);
});
} else {
console.log('[RedisService] Redis is disabled. Cache will not be used.');
}
}
}
// Lấy client Redis
get client() {
return redisInstance; // Trả về instance Redis đã khởi tạo
}
// Các phương thức khác (ping, set, get, del, exists) như đã mô tả ở trên
async ping() {
return redisInstance ? await redisInstance.ping() : null;
}
async set(key, value, ttl = 3600) {
if (!redisInstance) {
console.warn('Redis client is not initialized. Set request ignored.');
return; // Redis không được kích hoạt
}
try {
await redisInstance.set(key, JSON.stringify(value), 'EX', ttl);
console.log(`Set key ${key} in Redis with TTL ${ttl} seconds`);
} catch (error) {
console.error(`Failed to set key ${key} in Redis`, error);
}
}
async get(key) {
if (!redisInstance) {
console.warn('Redis client is not initialized. Get request ignored.');
return null; // Redis không được kích hoạt
}
try {
const data = await redisInstance.get(key);
return data ? JSON.parse(data) : null;
} catch (error) {
console.error(`Failed to get key ${key} from Redis`, error);
return null;
}
}
async del(key) {
if (!redisInstance) {
console.warn('Redis client is not initialized. Delete request ignored.');
return 0; // Redis không được kích hoạt
}
try {
return await redisInstance.del(key);
} catch (error) {
console.error(`Failed to delete key ${key} from Redis`, error);
return 0;
}
}
async exists(key) {
if (!redisInstance) {
console.warn('Redis client is not initialized. Exists check ignored.');
return 0; // Redis không được kích hoạt
}
try {
return await redisInstance.exists(key);
} catch (error) {
console.error(`Failed to check existence of key ${key} in Redis`, error);
return 0;
}
}
}
// Xuất module như một instance duy nhất
module.exports = new RedisService();