# 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 等需要加密的场景
