aboutsummaryrefslogtreecommitdiff
path: root/.venv/lib/python3.12/site-packages/litellm/caching/redis_cluster_cache.py
diff options
context:
space:
mode:
Diffstat (limited to '.venv/lib/python3.12/site-packages/litellm/caching/redis_cluster_cache.py')
-rw-r--r--.venv/lib/python3.12/site-packages/litellm/caching/redis_cluster_cache.py59
1 files changed, 59 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/litellm/caching/redis_cluster_cache.py b/.venv/lib/python3.12/site-packages/litellm/caching/redis_cluster_cache.py
new file mode 100644
index 00000000..2e7d1de1
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/litellm/caching/redis_cluster_cache.py
@@ -0,0 +1,59 @@
+"""
+Redis Cluster Cache implementation
+
+Key differences:
+- RedisClient NEEDs to be re-used across requests, adds 3000ms latency if it's re-created
+"""
+
+from typing import TYPE_CHECKING, Any, List, Optional
+
+from litellm.caching.redis_cache import RedisCache
+
+if TYPE_CHECKING:
+ from opentelemetry.trace import Span as _Span
+ from redis.asyncio import Redis, RedisCluster
+ from redis.asyncio.client import Pipeline
+
+ pipeline = Pipeline
+ async_redis_client = Redis
+ Span = _Span
+else:
+ pipeline = Any
+ async_redis_client = Any
+ Span = Any
+
+
+class RedisClusterCache(RedisCache):
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+ self.redis_async_redis_cluster_client: Optional[RedisCluster] = None
+ self.redis_sync_redis_cluster_client: Optional[RedisCluster] = None
+
+ def init_async_client(self):
+ from redis.asyncio import RedisCluster
+
+ from .._redis import get_redis_async_client
+
+ if self.redis_async_redis_cluster_client:
+ return self.redis_async_redis_cluster_client
+
+ _redis_client = get_redis_async_client(
+ connection_pool=self.async_redis_conn_pool, **self.redis_kwargs
+ )
+ if isinstance(_redis_client, RedisCluster):
+ self.redis_async_redis_cluster_client = _redis_client
+
+ return _redis_client
+
+ def _run_redis_mget_operation(self, keys: List[str]) -> List[Any]:
+ """
+ Overrides `_run_redis_mget_operation` in redis_cache.py
+ """
+ return self.redis_client.mget_nonatomic(keys=keys) # type: ignore
+
+ async def _async_run_redis_mget_operation(self, keys: List[str]) -> List[Any]:
+ """
+ Overrides `_async_run_redis_mget_operation` in redis_cache.py
+ """
+ async_redis_cluster_client = self.init_async_client()
+ return await async_redis_cluster_client.mget_nonatomic(keys=keys) # type: ignore