This commit is contained in:
薇薇安 2026-01-15 22:10:23 +08:00
parent b2860f8fdb
commit 62710a5720
2 changed files with 45 additions and 3 deletions

View File

@ -75,11 +75,13 @@ async def get_recommendations(
# 从Redis读取推荐
recommendations = []
cache_available = False
try:
import time
cache_key = "recommendations:realtime"
cached_data = await client.redis_cache.hgetall(cache_key)
if cached_data:
cache_available = True
current_time = time.time()
max_age = 3600 * 2 # 推荐最大保留时间2小时
@ -96,7 +98,37 @@ async def get_recommendations(
recommendations.sort(key=lambda x: x.get('timestamp', 0), reverse=True)
logger.info(f"从Redis读取到 {len(recommendations)} 个有效推荐(已过滤过期)")
except Exception as e:
logger.debug(f"从Redis读取推荐失败: {e}")
logger.warning(f"从Redis读取推荐失败: {e}")
# 如果Redis中没有推荐实时生成
if not recommendations:
logger.info("Redis中没有推荐实时生成推荐...")
try:
from market_scanner import MarketScanner
from risk_manager import RiskManager
from trade_recommender import TradeRecommender
await client.connect()
try:
scanner = MarketScanner(client)
risk_manager = RiskManager(client)
recommender = TradeRecommender(client, scanner, risk_manager)
# 生成推荐会自动保存到Redis
recommendations = await recommender.generate_recommendations(
min_signal_strength=min_signal_strength,
max_recommendations=limit,
add_to_cache=True,
min_quality_score=0.0
)
logger.info(f"实时生成了 {len(recommendations)} 个推荐")
finally:
await client.disconnect()
except Exception as e:
logger.error(f"实时生成推荐失败: {e}")
import traceback
logger.error(traceback.format_exc())
# 方向过滤
if direction:
@ -109,6 +141,7 @@ async def get_recommendations(
"success": True,
"count": len(recommendations),
"type": "realtime",
"from_cache": cache_available,
"data": recommendations
}

View File

@ -300,13 +300,22 @@ class RedisCache:
if isinstance(k, bytes):
k = k.decode('utf-8')
if isinstance(v, bytes):
try:
v = json.loads(v.decode('utf-8'))
except:
v = v.decode('utf-8')
else:
try:
v = json.loads(v)
except:
pass
result[k] = v
return result
except Exception as e:
logger.debug(f"Redis Hash获取全部失败 {name}: {e}")
# Redis失败时尝试重新连接
if not self._connected:
await self.connect()
# 降级到内存缓存
if name in self._memory_cache: