fix/various fixes

This commit is contained in:
Kevin
2026-03-20 15:15:35 +08:00
parent 7f57f96c25
commit 7317bf10cd
112 changed files with 3790 additions and 2242 deletions

View File

@@ -4,13 +4,13 @@ Redis 客户端与会话/缓存能力:供应用生命周期、会话历史、
"""
import json
from app.core.logging import get_logger
from datetime import datetime, timezone
from typing import Any, Dict, List, Optional
import redis.asyncio as aioredis
from app.core.config import settings
from app.core.logging import get_logger
logger = get_logger(__name__)
@@ -62,6 +62,21 @@ class RedisService:
logger.error("获取对话历史失败: %s", e)
return []
async def set_conversation_history(
self, conversation_id: str, history: List[Dict[str, Any]]
) -> bool:
"""整表覆盖会话历史(用于从 DB 回填),应用 session_ttl。"""
try:
client = await self.get_client()
key = self._conversation_key(conversation_id)
await client.setex(
key, self.session_ttl, json.dumps(history, ensure_ascii=False)
)
return True
except Exception as e:
logger.error("写入对话历史失败: %s", e)
return False
async def add_message(
self,
conversation_id: str,
@@ -102,6 +117,25 @@ class RedisService:
logger.error("清除对话历史失败: %s", e)
return False
async def delete_keys_matching_pattern(self, pattern: str) -> int:
"""按 SCAN 批量删除 key避免阻塞式 KEYS *。"""
try:
client = await self.get_client()
batch: list[str] = []
deleted = 0
async for key in client.scan_iter(match=pattern):
batch.append(key)
if len(batch) >= 200:
deleted += int(await client.delete(*batch))
batch.clear()
if batch:
deleted += int(await client.delete(*batch))
return deleted
except Exception as e:
logger.error("按 pattern 删除 Redis key 失败: %s", e)
return 0
async def extend_session_ttl(self, conversation_id: str) -> bool:
try:
client = await self.get_client()