This commit is contained in:
薇薇安 2026-01-18 09:36:15 +08:00
parent b8a77eb18d
commit 0b11b72eb8
3 changed files with 47 additions and 15 deletions

View File

@ -16,5 +16,11 @@ python-binance==1.0.19
websocket-client==1.6.1
aiohttp==3.9.1
# Redis/Valkey 缓存依赖(与 trading_system 保持一致)
# Redis/Valkey 缓存依赖
# redis-py 4.2+ 同时支持同步和异步客户端可以替代aioredis
# - redis.Redis: 同步客户端用于config_manager配置缓存
# - redis.asyncio.Redis: 异步客户端用于trading_system可替代aioredis
# 注意如果只安装redis-py可以同时满足同步和异步需求无需aioredis
redis>=4.2.0
# 保留aioredis作为备选如果某些代码仍在使用aioredis接口
aioredis==2.0.1

View File

@ -7,11 +7,18 @@ from typing import Optional, Any, Dict, List
import ssl
try:
# 使用 redis-py 4.2+ 的异步客户端(替代 aioredis
import redis.asyncio as aioredis
from redis.asyncio import Redis
REDIS_AVAILABLE = True
except ImportError as e:
# 如果 redis.asyncio 不可用,尝试回退到 aioredis向后兼容
try:
import aioredis
from aioredis import Redis
AIOREDIS_AVAILABLE = True
except ImportError as e:
AIOREDIS_AVAILABLE = False
REDIS_AVAILABLE = True
except ImportError:
REDIS_AVAILABLE = False
Redis = None
import sys
import os
@ -53,14 +60,14 @@ class RedisCache:
async def connect(self):
"""连接 Redis"""
if not AIOREDIS_AVAILABLE:
if not REDIS_AVAILABLE:
import sys
import os
logger.warning("aioredis 未安装,将使用内存缓存")
logger.warning("redis 未安装,将使用内存缓存")
logger.debug(f" Python 路径: {sys.executable}")
logger.debug(f" Python 版本: {sys.version.split()[0]}")
logger.debug(f" 导入错误: {_import_error if '_import_error' in globals() else '未知'}")
logger.debug(f" 提示: 请运行 'pip install aioredis==2.0.1' 安装 aioredis")
logger.debug(f" 提示: 请运行 'pip install redis>=4.2.0' 安装 redis-py")
self.redis = None
self._connected = False
return
@ -114,6 +121,20 @@ class RedisCache:
logger.info(f"URL 格式异常,使用独立的用户名和密码进行认证: {self.username}")
# 创建 Redis 连接
# 使用 redis.asyncio.from_urlredis-py 4.2+)或 aioredis.from_url向后兼容
# redis-py 需要 decode_responses=Trueaioredis 2.0 可能不需要
# 检查是否是 redis.asyncio通过检查模块名称
try:
module_name = aioredis.__name__ if hasattr(aioredis, '__name__') else ''
is_redis_py = 'redis.asyncio' in module_name or 'redis' in module_name
except:
is_redis_py = False
if is_redis_py:
# redis-py 4.2+ 的异步客户端,需要 decode_responses=True
connection_kwargs['decode_responses'] = True
# aioredis 2.0 不需要 decode_responses它默认返回字节
self.redis = await aioredis.from_url(
self.redis_url,
**connection_kwargs

View File

@ -8,4 +8,9 @@ pymysql==1.1.0
python-dotenv==1.0.0
# Redis 缓存依赖
# redis-py 4.2+ 同时支持同步和异步客户端
# - redis.Redis: 同步客户端用于backend/config_manager
# - redis.asyncio.Redis: 异步客户端用于trading_system替代aioredis
redis>=4.2.0
# 保留aioredis作为备选向后兼容如果某些代码仍在使用
aioredis==2.0.1