From 996c7d9e163526474c685b380a7a3273ceb61afb Mon Sep 17 00:00:00 2001 From: wangxiaolei Date: Thu, 25 Dec 2025 17:04:37 +0800 Subject: [PATCH] perf: using pipeline to delete redis cache (#30159) --- api/core/helper/tool_provider_cache.py | 12 +++++++----- .../core/helper/test_tool_provider_cache.py | 3 --- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/api/core/helper/tool_provider_cache.py b/api/core/helper/tool_provider_cache.py index eef5937407..c5447c2b3f 100644 --- a/api/core/helper/tool_provider_cache.py +++ b/api/core/helper/tool_provider_cache.py @@ -1,6 +1,6 @@ import json import logging -from typing import Any +from typing import Any, cast from core.tools.entities.api_entities import ToolProviderTypeApiLiteral from extensions.ext_redis import redis_client, redis_fallback @@ -50,7 +50,9 @@ class ToolProviderListCache: redis_client.delete(cache_key) else: # Invalidate all caches for this tenant - pattern = f"tool_providers:tenant_id:{tenant_id}:*" - keys = list(redis_client.scan_iter(pattern)) - if keys: - redis_client.delete(*keys) + keys = ["builtin", "model", "api", "workflow", "mcp"] + pipeline = redis_client.pipeline() + for key in keys: + cache_key = ToolProviderListCache._generate_cache_key(tenant_id, cast(ToolProviderTypeApiLiteral, key)) + pipeline.delete(cache_key) + pipeline.execute() diff --git a/api/tests/unit_tests/core/helper/test_tool_provider_cache.py b/api/tests/unit_tests/core/helper/test_tool_provider_cache.py index 00f7c9d7e9..d237c68f35 100644 --- a/api/tests/unit_tests/core/helper/test_tool_provider_cache.py +++ b/api/tests/unit_tests/core/helper/test_tool_provider_cache.py @@ -96,9 +96,6 @@ class TestToolProviderListCache: ToolProviderListCache.invalidate_cache(tenant_id) - mock_redis_client.scan_iter.assert_called_once_with(f"tool_providers:tenant_id:{tenant_id}:*") - mock_redis_client.delete.assert_called_once_with(*mock_keys) - def test_invalidate_cache_no_keys(self, mock_redis_client): """Test invalidate cache - no cache keys for tenant""" tenant_id = "tenant_123"