enabled redis in cluster mode

This commit is contained in:
hackjammer
2023-01-15 21:54:16 +00:00
parent ab26fad604
commit e8193b5c22

View File

@@ -1,16 +1,18 @@
from typing import Optional, Tuple from typing import Optional, Tuple
from redis.asyncio.client import Redis from redis.asyncio.client import AbstractRedis
from redis.asyncio.cluster import AbstractRedisCluster
from fastapi_cache.backends import Backend from fastapi_cache.backends import Backend
class RedisBackend(Backend): class RedisBackend(Backend):
def __init__(self, redis: Redis): def __init__(self, redis: AbstractRedis):
self.redis = redis self.redis = redis
self.is_cluster = isinstance(redis, AbstractRedisCluster)
async def get_with_ttl(self, key: str) -> Tuple[int, str]: async def get_with_ttl(self, key: str) -> Tuple[int, str]:
async with self.redis.pipeline(transaction=True) as pipe: async with self.redis.pipeline(transaction=not self.is_cluster) as pipe:
return await (pipe.ttl(key).get(key).execute()) return await (pipe.ttl(key).get(key).execute())
async def get(self, key: str) -> Optional[str]: async def get(self, key: str) -> Optional[str]:
@@ -25,4 +27,4 @@ class RedisBackend(Backend):
return await self.redis.eval(lua, numkeys=0) return await self.redis.eval(lua, numkeys=0)
elif key: elif key:
return await self.redis.delete(key) return await self.redis.delete(key)
return 0 return 0