You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123 lines
3.6 KiB

# 数据存储与缓存策略
## 1. 缓存服务 (Redis + MySQL)
### 代码位置
- **文件**`backend/src/services/cacheService.ts`
- **核心方法**
- `set(key, value, options)`: 写入Redis缓存
- `saveToMySQL(symbol, type, data)`: 写入MySQL数据库
### 写入场景
1. **数据首次获取**
- 当从数据源获取新数据时会同时写入Redis和MySQL
- 代码路径:`cacheService.get()` → 数据源获取 → `set()` + `saveToMySQL()`
2. **MySQL数据同步到Redis**
- 当从MySQL获取数据时会将数据同步到Redis
- 代码路径:`cacheService.get()` → MySQL获取 → `set()`
## 2. 市场服务 (使用缓存服务)
### 代码位置
- **文件**`backend/src/services/marketService.ts`
### 写入场景
1. **市场概览数据**
- 方法:`fetchMarketOverview()`
- 缓存键:`market:overview`
- 过期时间5分钟
2. **品种详情数据**
- 方法:`fetchMarketDetail(symbol)`
- 缓存键:`market:detail:{symbol}`
- 过期时间5分钟
3. **K线数据**
- 方法:`fetchKlineData(symbol, period)`
- 缓存键:`market:kline:{symbol}:{period}`
- 过期时间10分钟
4. **市场热点数据**
- 方法:`fetchMarketHotspots()`
- 缓存键:`market:hotspots`
- 过期时间5分钟
## 3. Python服务数据存储 (SQLite)
### 代码位置
- **文件**`backend/service_implementation/qihuo_analyzer/data/data_storage.py`
### 写入场景
1. **分析结果**
- 方法:`save_analysis_result(result)`
- 表:`analysis_results`
- 场景当AI分析完成后保存分析结果
2. **K线数据**
- 方法:`save_kline_data(symbol, duration, df)`
- 表:`kline_data`
- 场景当获取K线数据后保存到数据库
3. **交易建议**
- 方法:`save_trade_recommendation(recommendation)`
- 表:`trade_recommendations`
- 场景:当生成交易建议后保存
4. **风险监控数据**
- 方法:`save_risk_monitoring(monitoring_data)`
- 表:`risk_monitoring`
- 场景:当监控交易风险时保存
## 4. Flask API服务 (调用Python存储)
### 代码位置
- **文件**`backend/service_implementation/service/app.py`
### 写入场景
1. **K线数据**
- 路径:`/api/kline`
- 代码当数据库中没有K线数据时从数据源获取并保存
- 调用:`data_storage.save_kline_data()`
2. **分析结果**
- 路径:`/api/analyze`
- 代码当AI分析完成后保存分析结果
- 调用:`data_storage.save_analysis_result()`
3. **风险监控数据**
- 路径:`/api/risk`
- 代码:当监控交易风险时保存
- 调用:`data_storage.save_risk_monitoring()`
## 5. 数据流动路径
### 前端 → 后端 API → 缓存服务 → 数据源
1. 前端请求数据
2. 后端API调用市场服务
3. 市场服务调用缓存服务
4. 缓存服务按优先级获取数据:
- Redis → MySQL → 数据源
5. 如果从数据源获取数据同步写入MySQL和Redis
### Python服务内部
1. Flask API接收请求
2. 调用数据获取器获取数据
3. 将数据保存到SQLite数据库
4. 返回数据给前端
## 6. 缓存策略
- **Redis**:短期缓存,用于高频访问数据
- 市场概览5分钟
- 品种详情5分钟
- K线数据10分钟
- 市场热点5分钟
- **MySQL**:持久化存储,用于长期数据
- 存储所有从数据源获取的数据
- **SQLite**Python服务本地存储
- 存储分析结果、K线数据、交易建议、风险监控数据
这种多层缓存策略确保了数据的快速访问和持久化存储,同时减少了对外部数据源的请求频率。