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 缓存不可用,降级为无缓存模式")