From d6ae0d85cda0876fe1d61619a5657e7510afe8e2 Mon Sep 17 00:00:00 2001 From: iomgaa Date: Thu, 9 Jul 2026 13:52:33 -0400 Subject: [PATCH] =?UTF-8?q?fix:=20Redis=20=E7=BC=93=E5=AD=98=E6=9E=84?= =?UTF-8?q?=E9=80=A0=E4=BF=AE=E6=AD=A3=20+=20TTL=3D0=20=E6=B0=B8=E4=B8=8D?= =?UTF-8?q?=E8=BF=87=E6=9C=9F=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - main.py: 先创建 aioredis 客户端再传入 RedisResponseCache - redis_cache.py: ttl_s=None 时不设过期时间 - .env: REDIS_CACHE_TTL=0(永不过期) Co-Authored-By: Claude Opus 4.6 (1M context) --- adapters/redis_cache.py | 9 ++++++--- main.py | 5 ++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/adapters/redis_cache.py b/adapters/redis_cache.py index 866d08a..4af573c 100644 --- a/adapters/redis_cache.py +++ b/adapters/redis_cache.py @@ -22,10 +22,10 @@ class RedisResponseCache: Args: redis: 异步 Redis 客户端实例(duck-typed,需支持 get/set 方法)。 - ttl_s: 缓存过期时间(秒)。 + ttl_s: 缓存过期时间(秒)。None 表示永不过期。 """ - def __init__(self, redis: Any, ttl_s: int) -> None: + def __init__(self, redis: Any, ttl_s: int | None) -> None: self._redis = redis self._ttl_s = ttl_s @@ -86,6 +86,9 @@ class RedisResponseCache: try: key = self._build_key(model, messages) value = json.dumps(dataclasses.asdict(response), ensure_ascii=False) - await self._redis.set(key, value, ex=self._ttl_s) + if self._ttl_s: + await self._redis.set(key, value, ex=self._ttl_s) + else: + await self._redis.set(key, value) except Exception: logger.warning("Redis 缓存写入失败,跳过缓存") diff --git a/main.py b/main.py index 21be78b..5ed49d0 100644 --- a/main.py +++ b/main.py @@ -85,9 +85,12 @@ def _build_adapters(settings: InfraSettings, embed_cfg: dict) -> _Adapters: cache = None if settings.redis_url: try: + import redis.asyncio as aioredis from adapters.redis_cache import RedisResponseCache - cache = RedisResponseCache(redis_url=settings.redis_url, ttl=settings.redis_cache_ttl) + redis_client = aioredis.from_url(settings.redis_url, decode_responses=True) + ttl_s = settings.redis_cache_ttl if settings.redis_cache_ttl > 0 else None + cache = RedisResponseCache(redis=redis_client, ttl_s=ttl_s) except Exception: logger.warning("Redis 缓存不可用,降级为无缓存模式")