fix: 在 Provider/Endpoint/Key 变更时清除 /v1/models 列表缓存

- 将 on_key_allowed_models_changed 改为 async 函数
- 在 Provider/Endpoint/Key 的增删改操作后调用 invalidate_models_list_cache
- 优化 invalidate_models_list_cache 使用 delete_pattern 通配符删除
This commit is contained in:
fawney19
2026-01-16 19:42:35 +08:00
parent 019e148ddb
commit 45f071abd9
8 changed files with 66 additions and 17 deletions

View File

@@ -51,11 +51,19 @@ class CacheInvalidationService:
except Exception as e:
logger.error(f"[CacheInvalidation] 失效 ModelCacheService 缓存失败: {e}")
# 4. 清除 /v1/models 列表缓存
from src.api.base.models_service import invalidate_models_list_cache
try:
await invalidate_models_list_cache()
except Exception as e:
logger.error(f"[CacheInvalidation] 失效 models list 缓存失败: {e}")
def on_model_changed(self, provider_id: str, global_model_id: str):
"""Model 变更时的缓存失效"""
self._refresh_provider_cache(provider_id)
def on_key_allowed_models_changed(self, provider_id: str) -> None:
async def on_key_allowed_models_changed(self, provider_id: str) -> None:
"""
Key 的 allowed_models 变更时的缓存失效
@@ -68,6 +76,14 @@ class CacheInvalidationService:
logger.info(f"[CacheInvalidation] Key allowed_models 变更: provider_id={provider_id}")
self._refresh_provider_cache(provider_id)
# 清除 /v1/models 列表缓存allowed_models 变更会影响模型可用性)
from src.api.base.models_service import invalidate_models_list_cache
try:
await invalidate_models_list_cache()
except Exception as e:
logger.error(f"[CacheInvalidation] 失效 models list 缓存失败: {e}")
def _refresh_provider_cache(self, provider_id: str) -> None:
"""刷新指定 Provider 的 ModelMapper 缓存"""
for mapper in self._model_mappers:

View File

@@ -360,7 +360,7 @@ class ModelFetchScheduler:
if has_changed and provider_id:
from src.services.model.global_model import on_key_allowed_models_changed
on_key_allowed_models_changed(
await on_key_allowed_models_changed(
db=db,
provider_id=provider_id,
allowed_models=list(key.allowed_models or []),

View File

@@ -15,7 +15,7 @@ from src.models.database import GlobalModel, Model
from src.models.pydantic_models import GlobalModelUpdate
def on_key_allowed_models_changed(
async def on_key_allowed_models_changed(
db: Session,
provider_id: str,
allowed_models: List[str],
@@ -24,7 +24,7 @@ def on_key_allowed_models_changed(
Key 的 allowed_models 变更后的统一处理
包括:
1. 触发缓存失效
1. 触发缓存失效(包括 /v1/models 列表缓存)
2. 检查并自动关联匹配的 GlobalModel
Args:
@@ -36,7 +36,7 @@ def on_key_allowed_models_changed(
# 1. 触发缓存失效
cache_service = get_cache_invalidation_service()
cache_service.on_key_allowed_models_changed(provider_id)
await cache_service.on_key_allowed_models_changed(provider_id)
# 2. 检查并自动关联 GlobalModel
if allowed_models: