| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- const redis = require('redis');
- const config = require('../../config.json');
- const Logger = require('../../lib/Logger');
- const path = require('path');
- class RedisClient {
- constructor() {
- // node-redis v4 必须使用 socket 或 url,顶层 host/port 会被忽略并默认连 127.0.0.1:6379
- const clientOptions = {
- socket: {
- host: config.redis.host,
- port: config.redis.port
- }
- };
- if (config.redis.password) {
- clientOptions.password = config.redis.password;
- }
- this.client = redis.createClient(clientOptions);
- this.logger = new Logger(path.join(__dirname, '../../logs/Redis.log'), 'INFO');
- this.logger.info(`Redis 目标:${config.redis.host}:${config.redis.port}`);
- // 处理连接错误
- this.client.on('error', (err) => {
- this.logger.error(`Redis连接出错:${err?.message || err?.stack || err}`);
- });
- // 确保连接成功
- this.client.on('connect', () => {
- this.logger.info('Redis连接成功!');
- });
- // 在连接建立时标记为已连接状态
- this.client.on('ready', () => {
- this.logger.info('Redis客户端已就绪!');
- });
- // 在客户端关闭时处理事件
- this.client.on('end', () => {
- this.logger.warn('Redis客户端连接已关闭!');
- });
- }
- // 获取 Redis 客户端实例
- getClient() {
- if (!this.client.isOpen) {
- this.client.connect().catch((err) => {
- this.logger.error(`重新连接Redis时出错:${err?.message || err?.stack || err}`);
- });
- }
- return this.client;
- }
- }
- const Redis = new RedisClient().getClient();
- module.exports = Redis;
|