feat: 整合开发历史
This commit is contained in:
@@ -1,20 +1,24 @@
|
||||
import redis
|
||||
import redis.asyncio as redis
|
||||
from .config_loader import global_config as config
|
||||
from .logger import logger
|
||||
|
||||
class RedisManager:
|
||||
"""
|
||||
Redis 连接管理器
|
||||
Redis 连接管理器(异步单例)
|
||||
"""
|
||||
_pool = None
|
||||
_client = None
|
||||
_instance = None
|
||||
_redis = None
|
||||
|
||||
@classmethod
|
||||
def initialize(cls):
|
||||
def __new__(cls):
|
||||
if cls._instance is None:
|
||||
cls._instance = super().__new__(cls)
|
||||
return cls._instance
|
||||
|
||||
async def initialize(self):
|
||||
"""
|
||||
初始化 Redis 连接并进行健康检查
|
||||
异步初始化 Redis 连接并进行健康检查
|
||||
"""
|
||||
if cls._pool is None:
|
||||
if self._redis is None:
|
||||
try:
|
||||
host = config.redis['host']
|
||||
port = config.redis['port']
|
||||
@@ -23,39 +27,32 @@ class RedisManager:
|
||||
|
||||
logger.info(f"正在尝试连接 Redis: {host}:{port}, DB: {db}")
|
||||
|
||||
cls._pool = redis.ConnectionPool(
|
||||
self._redis = redis.Redis(
|
||||
host=host,
|
||||
port=port,
|
||||
db=db,
|
||||
password=password,
|
||||
decode_responses=True
|
||||
)
|
||||
cls._client = redis.Redis(connection_pool=cls._pool)
|
||||
if cls._client.ping():
|
||||
if await self._redis.ping():
|
||||
logger.success("Redis 连接成功!")
|
||||
else:
|
||||
logger.error("Redis 连接失败: PING 命令无响应")
|
||||
except redis.exceptions.ConnectionError as e:
|
||||
logger.error(f"Redis 连接失败: {e}")
|
||||
cls._pool = None
|
||||
cls._client = None
|
||||
self._redis = None
|
||||
except Exception as e:
|
||||
logger.exception(f"Redis 初始化时发生未知错误: {e}")
|
||||
cls._pool = None
|
||||
cls._client = None
|
||||
self._redis = None
|
||||
|
||||
@classmethod
|
||||
def get_redis(cls):
|
||||
@property
|
||||
def redis(self):
|
||||
"""
|
||||
获取 Redis 连接
|
||||
|
||||
:return: Redis 连接实例
|
||||
获取 Redis 连接实例
|
||||
"""
|
||||
if cls._client is None:
|
||||
# 理论上 initialize 应该在程序启动时被调用,这里作为备用
|
||||
cls.initialize()
|
||||
return cls._client
|
||||
if self._redis is None:
|
||||
raise ConnectionError("Redis 未初始化或连接失败,请先调用 initialize()")
|
||||
return self._redis
|
||||
|
||||
# 在模块加载时直接初始化
|
||||
RedisManager.initialize()
|
||||
redis_client = RedisManager.get_redis()
|
||||
# 全局 Redis 管理器实例
|
||||
redis_manager = RedisManager()
|
||||
|
||||
Reference in New Issue
Block a user