8
from __future__ import annotations
11
from datetime import timedelta
13
import aioredis # https://aioredis.readthedocs.io/en/latest/getting-started/
15
from metagpt.configs.redis_config import RedisConfig
16
from metagpt.logs import logger
20
def __init__(self, config: RedisConfig = None):
24
async def _connect(self, force=False):
25
if self._client and not force:
29
self._client = await aioredis.from_url(
31
username=self.config.username,
32
password=self.config.password,
36
except Exception as e:
37
logger.warning(f"Redis initialization has failed:{e}")
40
async def get(self, key: str) -> bytes | None:
41
if not await self._connect() or not key:
44
v = await self._client.get(key)
46
except Exception as e:
47
logger.exception(f"{e}, stack:{traceback.format_exc()}")
50
async def set(self, key: str, data: str, timeout_sec: int = None):
51
if not await self._connect() or not key:
54
ex = None if not timeout_sec else timedelta(seconds=timeout_sec)
55
await self._client.set(key, data, ex=ex)
56
except Exception as e:
57
logger.exception(f"{e}, stack:{traceback.format_exc()}")
59
async def close(self):
62
await self._client.close()