|
|
# 数据存储与缓存策略
|
|
|
|
|
|
## 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线数据、交易建议、风险监控数据
|
|
|
|
|
|
这种多层缓存策略确保了数据的快速访问和持久化存储,同时减少了对外部数据源的请求频率。 |