init
This commit is contained in:
80
backend/dist/utils/redis.js
vendored
Normal file
80
backend/dist/utils/redis.js
vendored
Normal file
@@ -0,0 +1,80 @@
|
||||
"use strict";
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.getRedisClient = exports.connectRedis = exports.redisClient = void 0;
|
||||
const redis_1 = require("redis");
|
||||
const config_1 = __importDefault(require("../config"));
|
||||
// Create Redis client
|
||||
const redisClient = (0, redis_1.createClient)({
|
||||
url: `redis://${config_1.default.redis.password ? `${config_1.default.redis.password}@` : ''}${config_1.default.redis.host}:${config_1.default.redis.port}`,
|
||||
});
|
||||
exports.redisClient = redisClient;
|
||||
// Handle Redis connection errors
|
||||
redisClient.on('error', (err) => {
|
||||
console.error('Redis Client Error:', err);
|
||||
});
|
||||
// Create a mock Redis client for development when real connection fails
|
||||
const createMockRedisClient = () => {
|
||||
const store = new Map();
|
||||
return {
|
||||
isOpen: true,
|
||||
connect: async () => console.log('Mock Redis client connected'),
|
||||
get: async (key) => store.get(key) || null,
|
||||
set: async (key, value) => {
|
||||
store.set(key, value);
|
||||
return 'OK';
|
||||
},
|
||||
incr: async (key) => {
|
||||
const current = parseInt(store.get(key) || '0', 10);
|
||||
const newValue = current + 1;
|
||||
store.set(key, newValue.toString());
|
||||
return newValue;
|
||||
},
|
||||
decr: async (key) => {
|
||||
const current = parseInt(store.get(key) || '0', 10);
|
||||
const newValue = Math.max(0, current - 1);
|
||||
store.set(key, newValue.toString());
|
||||
return newValue;
|
||||
},
|
||||
quit: async () => console.log('Mock Redis client disconnected'),
|
||||
};
|
||||
};
|
||||
// Connect to Redis
|
||||
let mockRedisClient = null;
|
||||
const connectRedis = async () => {
|
||||
try {
|
||||
if (!redisClient.isOpen) {
|
||||
await redisClient.connect();
|
||||
console.log('Redis client connected');
|
||||
}
|
||||
return redisClient;
|
||||
}
|
||||
catch (error) {
|
||||
console.error('Failed to connect to Redis:', error);
|
||||
console.log('Using mock Redis client for development...');
|
||||
if (!mockRedisClient) {
|
||||
mockRedisClient = createMockRedisClient();
|
||||
}
|
||||
return mockRedisClient;
|
||||
}
|
||||
};
|
||||
exports.connectRedis = connectRedis;
|
||||
// Export the appropriate client
|
||||
const getRedisClient = async () => {
|
||||
try {
|
||||
if (redisClient.isOpen) {
|
||||
return redisClient;
|
||||
}
|
||||
return await connectRedis();
|
||||
}
|
||||
catch (error) {
|
||||
if (!mockRedisClient) {
|
||||
mockRedisClient = createMockRedisClient();
|
||||
}
|
||||
return mockRedisClient;
|
||||
}
|
||||
};
|
||||
exports.getRedisClient = getRedisClient;
|
||||
exports.default = redisClient;
|
||||
Reference in New Issue
Block a user