# Brainstorm Summary

- Change: storage-cache-refactor
- Date: 2026-07-04

## 确认的技术方案

1. **Redis 数据结构**: 方案 C — 结构化键值存储
   - `market_data:{symbol}:{period}` → JSON（含 current_price, timestamp, candles）
   - `symbol_timestamps:{symbol}` → JSON（含 last_refresh_at, refresh_count）
   - TTL: 30 天

2. **集成方式**: 方案 B — cache.py 内部封装
   - cache.py 函数签名不变（仍接收 `db: Session`）
   - 函数内部判断：优先走 Redis/MySQL，降级时走原有 SQLite 逻辑
   - API 层零改动，渐进式迁移

3. **降级检测**: 方案 C — 惰性恢复
   - 启动时检测 Redis/MySQL 可用性
   - 运行时捕获异常标记不可用
   - 下次请求时距上次检测超 30 秒则尝试重连
   - 重连成功恢复，失败继续降级

4. **MySQL 驱动**: pymysql（纯 Python，Windows 零障碍部署）

5. **双写策略**: 同步双写，先写 MySQL 再更新 Redis
   - 写入流程：删 Redis 缓存 → 写 MySQL → 更新 Redis
   - MySQL 失败回滚，Redis 失败仅记录日志

## 关键取舍与风险

- Redis 内存占用 → TTL 30 天自动清理
- 双写一致性 → MySQL 优先，Redis 失败不影响持久化
- 降级检测延迟 → 30 秒惰性恢复阈值
- 数据迁移 → 启动时自动从 SQLite 迁移到 MySQL，保留 SQLite 兜底

## 测试策略

- 单元测试：StorageManager 各方法
- 集成测试：三级降级场景
- 故障注入：模拟 Redis/MySQL 不可用
- 性能对比：改造前后读取延迟

## Spec Patch

无（现有 delta spec 已覆盖所有验收场景）
