a
This commit is contained in:
parent
b2860f8fdb
commit
62710a5720
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user