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