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.

4.3 KiB

数据缓存功能 - 快速参考卡

📋 文件变更清单

前端文件

  • src/pages/admin/AdminConfig.jsx - 主要修改文件

后端文件

  • backend/src/api/market.ts - 新增3个API
  • backend/src/services/cacheService.ts - 新增2个方法

🚀 快速启动

编译后端

cd backend && npm run build

验证API

# 批量缓存
curl -X POST http://localhost:3007/api/market/cache-all

# 单合约缓存
curl -X POST http://localhost:3007/api/market/cache/AU

# 缓存统计
curl http://localhost:3007/api/market/cache-stats

📡 API 速查

操作 方法 端点 说明
批量缓存 POST /market/cache-all 缓存所有合约
单合约缓存 POST /market/cache/:symbol 强制刷新指定合约
缓存统计 GET /market/cache-stats 获取数据库统计
市场概览 GET /market/overview 获取合约列表
合约详情 GET /market/detail/:symbol 获取单个合约详情
K线数据 GET /market/klines/:symbol?period=1D 获取K线数据

🗄️ 缓存键命名规范

LocalStorage

cached_overview           - 市场概览
cached_alerts            - 风险预警
cached_detail_{code}     - 合约详情
cached_kline_{code}_{period}  - K线数据

Redis

market:overview              - 市场概览
market:detail:{symbol}       - 合约详情
market:kline:{symbol}:{period}  - K线数据

MySQL

-- market_data 表
symbol | type        | data
-------|-------------|--------
AU     | detail      | {...}
AU     | kline:1D    | {...}
CU     | detail      | {...}

⏱️ 缓存有效期

数据类型 LocalStorage Redis MySQL
市场概览 5分钟 5分钟 永久
风险预警 3分钟 3分钟 永久
合约详情 10分钟 5分钟 永久
K线数据 30分钟 10分钟 永久

🔧 常用操作

查看 MySQL 缓存

-- 查看所有缓存
SELECT symbol, type, updated_at FROM market_data ORDER BY updated_at DESC;

-- 按类型统计
SELECT type, COUNT(*) FROM market_data GROUP BY type;

-- 查看特定合约
SELECT * FROM market_data WHERE symbol = 'AU';

查看 Redis 缓存

# 查看所有 key
KEYS market:*

# 查看过期时间
TTL market:detail:AU

# 删除特定 key
DEL market:detail:AU

# 清空所有
FLUSHDB

清除 LocalStorage

// 清除所有缓存
Object.keys(localStorage).forEach(key => {
  if (key.startsWith('cached_')) {
    localStorage.removeItem(key);
  }
});

🐛 快速排错

问题 解决方案
页面加载失败 清除 vite 缓存 rm -rf node_modules/.vite
API 返回 500 检查数据源配置和数据源服务状态
缓存未写入 DB 检查 MySQL 连接和 market_data 表
Redis 未命中 检查 Redis 连接 redis-cli ping
批量缓存超时 查看后端日志,减少并发或分批处理

📊 监控命令

# 实时监控后端日志
tail -f backend/logs/app.log | grep -E "cache|Cache|缓存"

# 监控 MySQL 查询
mysql -u root -p -e "SELECT COUNT(*), type FROM market_data GROUP BY type;"

# 监控 Redis 内存
redis-cli INFO memory | grep used_memory_human

# 查看当前连接的合约数
curl -s http://localhost:3007/api/market/overview | jq '.data | length'

📝 代码片段

前端调用批量缓存

const cacheAll = async () => {
  const res = await fetch('/api/market/cache-all', { method: 'POST' });
  const data = await res.json();
  console.log(`成功: ${data.data.success}/${data.data.total}`);
};

前端调用单合约缓存

const cacheSymbol = async (symbol) => {
  const res = await fetch(`/api/market/cache/${symbol}`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ periods: ['1H', '4H', '1D'] })
  });
  return await res.json();
};

后端直接保存缓存

await cacheService.saveDirect('AU', 'detail', data, { expireTime: 300 });

🔗 相关文档

  • 完整开发文档: docs/data-cache-feature.md
  • API 参考文档: docs/api-reference.md
  • 部署指南: docs/cache-deployment-guide.md

最后更新: 2026-03-02