auto_trade_sys/docs/Redis缓存问题修复说明.md
薇薇安 9fe028d704 a
2026-01-27 10:36:56 +08:00

4.2 KiB
Raw Permalink Blame History

Redis缓存问题修复说明

🔍 问题分析

即使执行了数据迁移,日志中仍然显示格式转换警告。原因是:

  1. Redis缓存中还有旧数据即使数据库已经迁移为比例形式0.30Redis缓存中可能还存储着百分比形式30
  2. 格式转换后没有更新缓存:当检测到值>1时代码会转换为比例形式0.30但转换后的值没有写回Redis缓存
  3. 下次读取时再次触发转换下次从Redis读取时又会读到旧值30再次触发转换

修复方案

方案1在格式转换时更新Redis缓存已实现

修改位置backend/config_manager.py:756-777

修复逻辑

if value > 1:
    old_value = value
    value = value / 100.0
    logger.warning(...)
    # ⚠️ 关键修复转换后立即更新Redis缓存
    try:
        if key in RISK_KNOBS_KEYS:
            # 风险旋钮更新当前账号的Redis缓存
            self._set_to_redis(key, value)
            self._cache[key] = value
        else:
            # 全局配置更新全局配置的Redis缓存
            global_config_mgr._set_to_redis(key, value)
            global_config_mgr._cache[key] = value
    except Exception as e:
        logger.debug(f"更新Redis缓存失败不影响使用: {key} = {e}")

效果

  • 转换后的值0.30会立即写回Redis缓存
  • 下次读取时直接从Redis读取到正确的值0.30),不再触发转换
  • 警告日志会逐渐减少,直到所有缓存都更新完成

方案2手动清除Redis缓存推荐配合使用

执行命令

# 清除所有配置缓存
redis-cli DEL "config:trading_config:*"
redis-cli DEL "config:global_strategy_config"

# 或者清除特定账号的缓存
redis-cli DEL "config:trading_config:1"
redis-cli DEL "config:trading_config:2"
redis-cli DEL "config:trading_config:3"
redis-cli DEL "config:trading_config:4"

效果

  • 强制系统从数据库重新加载配置
  • 如果数据库已经迁移加载的将是正确的比例形式0.30
  • 新的配置值会写入Redis缓存

🔧 实施步骤

步骤1应用代码修复已完成

代码已经修复格式转换时会自动更新Redis缓存。

步骤2清除Redis缓存推荐

# 清除所有配置缓存
redis-cli DEL "config:trading_config:*"
redis-cli DEL "config:global_strategy_config"

步骤3重启服务

# 重启后端服务
supervisorctl restart backend

# 重启交易进程
supervisorctl restart auto_sys_acc1 auto_sys_acc2 auto_sys_acc3 auto_sys_acc4

步骤4验证

检查日志

# 查看日志,确认格式转换警告逐渐减少
tail -f /www/wwwroot/autosys_new/logs/trading_*.log | grep "配置值格式转换"

预期结果

  • 第一次读取时可能会看到格式转换警告从Redis读取到旧值
  • 转换后值会写回Redis缓存
  • 下次读取时,不再触发转换,警告消失

📊 数据流

修复前

从Redis读取30旧数据
  ↓
格式转换30 -> 0.30
  ↓
使用0.30
  ↓
⚠️ Redis缓存中还是30没有更新
  ↓
下次读取30再次触发转换

修复后

从Redis读取30旧数据
  ↓
格式转换30 -> 0.30
  ↓
更新Redis缓存0.30 ✅
  ↓
使用0.30
  ↓
下次读取0.30(不再触发转换)✅

总结

修复内容

  1. 代码修复格式转换时自动更新Redis缓存
  2. 手动清除清除Redis缓存强制从数据库重新加载

效果

  • 格式转换警告会逐渐减少
  • Redis缓存会自动更新为正确的值
  • 下次读取时不再触发转换

建议

  1. 立即清除Redis缓存:确保从数据库加载最新数据
  2. 重启服务:让新代码生效
  3. 监控日志:确认警告逐渐减少

🎯 最终效果

  • 数据库中统一存储比例形式0.30
  • Redis缓存中也是比例形式0.30
  • 前端直接显示小数0.30),不带%符号
  • 后端直接使用0.30),不需要转换
  • 日志中不再出现格式转换警告