修复重复初始化问题 - 统一Redis连接管理

主要修复:
1. 创建统一Redis连接管理器 (src/core/redis_manager.py)
   - 单例模式管理所有Redis连接
   - 懒加载连接,避免重复初始化
   - 线程安全的连接管理

2. 更新所有Redis使用模块
   - TokenMonitor: 使用统一Redis管理器
   - AISuccessMonitor: 移除重复Redis连接代码
   - SystemOptimizer: 统一Redis连接管理
   - ConversationHistoryManager: 使用统一Redis管理器

3. 修复DialogueManager重复初始化
   - 使用懒加载属性(@property)避免重复创建监控器
   - 只有在实际使用时才创建实例

4. 优化启动性能
   - 避免重复的Redis连接创建
   - 消除重复的TSP助手初始化
   - 减少启动时的日志输出

技术改进:
- 单例模式Redis管理器
- 懒加载组件初始化
- 统一连接管理
- 线程安全设计

解决启动卡顿问题,提升系统响应速度
This commit is contained in:
赵杰 Jie Zhao (雄狮汽车科技)
2025-09-18 19:57:35 +01:00
parent 228e9b838f
commit 4b4bd683d9
11 changed files with 318 additions and 169 deletions

View File

@@ -22,21 +22,32 @@ class CacheManager:
self.default_ttl = 60 # 默认1分钟过期提高响应速度
self.max_memory_size = 2000 # 增加内存缓存条目数
# Redis支持可选
# Redis支持可选- 延迟连接
self.redis_client = None
if redis_url:
self.redis_url = redis_url
self.redis_connected = False
def _ensure_redis_connection(self):
"""确保Redis连接延迟连接"""
if self.redis_url and not self.redis_connected:
try:
import redis
self.redis_client = redis.from_url(redis_url)
self.redis_client = redis.from_url(self.redis_url, socket_connect_timeout=2, socket_timeout=2)
self.redis_client.ping() # 测试连接
self.redis_connected = True
logger.info("Redis缓存已启用")
except ImportError:
logger.warning("Redis未安装使用内存缓存")
logger.debug("Redis未安装使用内存缓存")
except Exception as e:
logger.warning(f"Redis连接失败: {e},使用内存缓存")
logger.debug(f"Redis连接失败: {e},使用内存缓存")
self.redis_client = None
def get(self, key: str) -> Optional[Any]:
"""获取缓存值"""
try:
# 确保Redis连接
self._ensure_redis_connection()
# 先尝试Redis
if self.redis_client:
try:
@@ -66,6 +77,9 @@ class CacheManager:
ttl = ttl or self.default_ttl
expires_at = time.time() + ttl
# 确保Redis连接
self._ensure_redis_connection()
# 先尝试Redis
if self.redis_client:
try: