import pickle from logging import Logger from redis.asyncio import Redis as RedisClient from config import RedisConfig class Redis: def __init__(self, logger: Logger, config: RedisConfig, rootKeyName: str) -> None: self.client: RedisClient = RedisClient( host=config.host, port=config.port, password=config.password, auto_close_connection_pool=False, ) self.rootKeyName = rootKeyName self.logger = logger async def get(self, context: str, key: str): self.logger.info(f"get value {key} from redis") value = await self.client.get(f"{self.rootKeyName}:{context}:{key}") if value: return pickle.loads(value) return None async def set(self, context: str, key: str, value) -> None: self.logger.info(f"set value {key} to redis") await self.client.set( f"{self.rootKeyName}:{context}:{key}", pickle.dumps(value) ) async def close(self) -> None: await self.client.close()