fix/various fixes
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user