perf: using pipeline to delete redis cache (#30159)

This commit is contained in:
wangxiaolei 2025-12-25 17:04:37 +08:00 committed by GitHub
parent 0c4233e7df
commit 996c7d9e16
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 7 additions and 8 deletions

View File

@ -1,6 +1,6 @@
import json import json
import logging import logging
from typing import Any from typing import Any, cast
from core.tools.entities.api_entities import ToolProviderTypeApiLiteral from core.tools.entities.api_entities import ToolProviderTypeApiLiteral
from extensions.ext_redis import redis_client, redis_fallback from extensions.ext_redis import redis_client, redis_fallback
@ -50,7 +50,9 @@ class ToolProviderListCache:
redis_client.delete(cache_key) redis_client.delete(cache_key)
else: else:
# Invalidate all caches for this tenant # Invalidate all caches for this tenant
pattern = f"tool_providers:tenant_id:{tenant_id}:*" keys = ["builtin", "model", "api", "workflow", "mcp"]
keys = list(redis_client.scan_iter(pattern)) pipeline = redis_client.pipeline()
if keys: for key in keys:
redis_client.delete(*keys) cache_key = ToolProviderListCache._generate_cache_key(tenant_id, cast(ToolProviderTypeApiLiteral, key))
pipeline.delete(cache_key)
pipeline.execute()

View File

@ -96,9 +96,6 @@ class TestToolProviderListCache:
ToolProviderListCache.invalidate_cache(tenant_id) 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): def test_invalidate_cache_no_keys(self, mock_redis_client):
"""Test invalidate cache - no cache keys for tenant""" """Test invalidate cache - no cache keys for tenant"""
tenant_id = "tenant_123" tenant_id = "tenant_123"