a
This commit is contained in:
parent
b8a77eb18d
commit
0b11b72eb8
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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_url(redis-py 4.2+)或 aioredis.from_url(向后兼容)
|
||||
# redis-py 需要 decode_responses=True,aioredis 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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user