115 lines
3.4 KiB
Markdown
115 lines
3.4 KiB
Markdown
# 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` 中支持以下配置(优先从数据库读取,回退到环境变量):
|
||
|
||
```python
|
||
# 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 证书路径(可选)
|
||
```
|
||
|
||
### 环境变量配置示例
|
||
|
||
```bash
|
||
# 非 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 连接 URL
|
||
- `REDIS_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`。
|
||
|
||
安装依赖:
|
||
```bash
|
||
pip install -r trading_system/requirements.txt
|
||
```
|
||
|
||
## 使用说明
|
||
|
||
1. **配置 Redis/Valkey 连接**:设置 `REDIS_URL` 等配置项
|
||
2. **启动交易系统**:系统会自动连接 Redis 并启用缓存
|
||
3. **监控日志**:查看日志中的缓存命中情况
|
||
|
||
## 预期效果
|
||
|
||
根据 `REDIS_CACHE_ANALYSIS.md` 的评估:
|
||
|
||
- **API 调用减少**: 70-90%
|
||
- **系统响应速度**: 提升 70-80%
|
||
- **API 频率限制风险**: 显著降低
|
||
- **系统稳定性**: 提升(减少网络依赖)
|
||
|
||
## 注意事项
|
||
|
||
1. **缓存一致性**: TTL 设置已根据数据更新频率优化
|
||
2. **Redis 可用性**: 系统会自动处理 Redis 不可用的情况(降级到内存缓存)
|
||
3. **内存使用**: Redis 内存使用需要监控
|
||
4. **TLS 连接**: 支持 TLS 连接,适用于 Valkey 等需要加密的场景
|