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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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