a
This commit is contained in:
parent
b8a77eb18d
commit
0b11b72eb8
|
|
@ -16,5 +16,11 @@ python-binance==1.0.19
|
||||||
websocket-client==1.6.1
|
websocket-client==1.6.1
|
||||||
aiohttp==3.9.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
|
aioredis==2.0.1
|
||||||
|
|
|
||||||
|
|
@ -7,11 +7,18 @@ from typing import Optional, Any, Dict, List
|
||||||
import ssl
|
import ssl
|
||||||
|
|
||||||
try:
|
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
|
import aioredis
|
||||||
from aioredis import Redis
|
from aioredis import Redis
|
||||||
AIOREDIS_AVAILABLE = True
|
REDIS_AVAILABLE = True
|
||||||
except ImportError as e:
|
except ImportError:
|
||||||
AIOREDIS_AVAILABLE = False
|
REDIS_AVAILABLE = False
|
||||||
Redis = None
|
Redis = None
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
|
|
@ -53,14 +60,14 @@ class RedisCache:
|
||||||
|
|
||||||
async def connect(self):
|
async def connect(self):
|
||||||
"""连接 Redis"""
|
"""连接 Redis"""
|
||||||
if not AIOREDIS_AVAILABLE:
|
if not REDIS_AVAILABLE:
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
logger.warning("aioredis 未安装,将使用内存缓存")
|
logger.warning("redis 未安装,将使用内存缓存")
|
||||||
logger.debug(f" Python 路径: {sys.executable}")
|
logger.debug(f" Python 路径: {sys.executable}")
|
||||||
logger.debug(f" Python 版本: {sys.version.split()[0]}")
|
logger.debug(f" Python 版本: {sys.version.split()[0]}")
|
||||||
logger.debug(f" 导入错误: {_import_error if '_import_error' in globals() else '未知'}")
|
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.redis = None
|
||||||
self._connected = False
|
self._connected = False
|
||||||
return
|
return
|
||||||
|
|
@ -114,6 +121,20 @@ class RedisCache:
|
||||||
logger.info(f"URL 格式异常,使用独立的用户名和密码进行认证: {self.username}")
|
logger.info(f"URL 格式异常,使用独立的用户名和密码进行认证: {self.username}")
|
||||||
|
|
||||||
# 创建 Redis 连接
|
# 创建 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 = await aioredis.from_url(
|
||||||
self.redis_url,
|
self.redis_url,
|
||||||
**connection_kwargs
|
**connection_kwargs
|
||||||
|
|
|
||||||
|
|
@ -8,4 +8,9 @@ pymysql==1.1.0
|
||||||
python-dotenv==1.0.0
|
python-dotenv==1.0.0
|
||||||
|
|
||||||
# Redis 缓存依赖
|
# 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
|
aioredis==2.0.1
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user