3.4 KiB
3.4 KiB
Redis 缓存实现说明
实现概述
根据 REDIS_CACHE_ANALYSIS.md 的分析,已实现以下缓存功能:
✅ 已实现的缓存功能
1. 交易对信息缓存 ⭐⭐⭐⭐⭐
- 位置:
binance_client.py::get_symbol_info() - 缓存键:
symbol_info:{symbol} - TTL: 1小时(3600秒)
- 数据结构: Hash(JSON序列化)
- 性能提升: 减少 API 调用 99%+,延迟从 ~100ms → ~1ms
2. K线数据缓存 ⭐⭐⭐⭐
- 位置:
binance_client.py::get_klines() - 缓存键:
klines:{symbol}:{interval}:{limit} - TTL: 根据 interval 动态设置
- 1m: 10秒
- 5m: 30秒
- 15m: 1分钟
- 1h: 5分钟
- 4h: 15分钟
- 1d: 1小时
- 性能提升: 减少 API 调用 90%+,加速市场扫描 70-80%
3. 24小时行情数据缓存 ⭐⭐⭐⭐
- 位置:
binance_client.py::get_ticker_24h()和get_all_tickers_24h() - 缓存键:
- 单个:
ticker_24h:{symbol} - 全部:
ticker_24h:all
- 单个:
- TTL: 30秒
- 性能提升: 减少 API 调用 95%+,加速市场扫描 95%
4. 市场扫描结果缓存 ⭐⭐
- 位置:
market_scanner.py::scan_market() - 缓存键:
scan_result:top_symbols - TTL: 30秒
- 性能提升: 在扫描间隔内可以复用结果
配置说明
Redis/Valkey 连接配置
在 config.py 中支持以下配置(优先从数据库读取,回退到环境变量):
# Redis 连接 URL(支持 TLS)
REDIS_URL = "redis://localhost:6379" # 或 "rediss://localhost:6380" (TLS)
REDIS_USE_TLS = False # 是否使用 TLS
REDIS_SSL_CERT_REQS = "required" # SSL 证书验证要求: 'none', 'optional', 'required'
REDIS_SSL_CA_CERTS = None # SSL CA 证书路径(可选)
环境变量配置示例
# 非 TLS 连接
export REDIS_URL="redis://localhost:6379"
export REDIS_USE_TLS="false"
# TLS 连接(Valkey)
export REDIS_URL="rediss://your-valkey-host:6380"
export REDIS_USE_TLS="true"
export REDIS_SSL_CERT_REQS="required"
export REDIS_SSL_CA_CERTS="/path/to/ca.crt" # 可选
数据库配置
也可以通过数据库 trading_config 表配置:
REDIS_URL: Redis 连接 URLREDIS_USE_TLS: 是否使用 TLS(布尔值)REDIS_SSL_CERT_REQS: SSL 证书验证要求REDIS_SSL_CA_CERTS: SSL CA 证书路径(可选)
降级机制
如果 Redis 连接失败,系统会自动降级到内存缓存:
- 交易对信息:使用内存缓存
_symbol_info_cache - 价格数据:使用 WebSocket 缓存
_price_cache - 其他数据:使用内存缓存
_memory_cache
依赖安装
已更新 requirements.txt,添加了 aioredis==2.0.1。
安装依赖:
pip install -r trading_system/requirements.txt
使用说明
- 配置 Redis/Valkey 连接:设置
REDIS_URL等配置项 - 启动交易系统:系统会自动连接 Redis 并启用缓存
- 监控日志:查看日志中的缓存命中情况
预期效果
根据 REDIS_CACHE_ANALYSIS.md 的评估:
- API 调用减少: 70-90%
- 系统响应速度: 提升 70-80%
- API 频率限制风险: 显著降低
- 系统稳定性: 提升(减少网络依赖)
注意事项
- 缓存一致性: TTL 设置已根据数据更新频率优化
- Redis 可用性: 系统会自动处理 Redis 不可用的情况(降级到内存缓存)
- 内存使用: Redis 内存使用需要监控
- TLS 连接: 支持 TLS 连接,适用于 Valkey 等需要加密的场景