Files
romm/backend/handler/redis_handler.py
Michael Manganiello 6eb8e6aeff misc: Add Redis async cache
Introduce an asynchronous Redis instance to be used in async functions.
Also, this change migrates most of the sync cache usage to the new async
cache.
2024-07-21 18:23:19 -03:00

79 lines
2.2 KiB
Python

import sys
from enum import Enum
from config import REDIS_DB, REDIS_HOST, REDIS_PASSWORD, REDIS_PORT, REDIS_USERNAME
from logger.logger import log
from redis import Redis
from redis.asyncio import Redis as AsyncRedis
from rq import Queue
class QueuePrio(Enum):
HIGH = "high"
DEFAULT = "default"
LOW = "low"
redis_client = Redis(
host=REDIS_HOST,
port=REDIS_PORT,
password=REDIS_PASSWORD,
username=REDIS_USERNAME,
db=REDIS_DB,
)
redis_url = (
f"redis://{REDIS_USERNAME}:{REDIS_PASSWORD}@{REDIS_HOST}:{REDIS_PORT}/{REDIS_DB}"
if REDIS_PASSWORD
else f"redis://{REDIS_HOST}:{REDIS_PORT}/{REDIS_DB}"
)
high_prio_queue = Queue(name=QueuePrio.HIGH.value, connection=redis_client)
default_queue = Queue(name=QueuePrio.DEFAULT.value, connection=redis_client)
low_prio_queue = Queue(name=QueuePrio.LOW.value, connection=redis_client)
def __get_sync_cache() -> Redis:
if "pytest" in sys.modules:
# Only import fakeredis when running tests, as it is a test dependency.
from fakeredis import FakeRedis
return FakeRedis(version=7)
log.info(f"Connecting to redis in {sys.argv[0]}...")
# A separate client that auto-decodes responses is needed
client = Redis(
host=REDIS_HOST,
port=REDIS_PORT,
password=REDIS_PASSWORD,
username=REDIS_USERNAME,
db=REDIS_DB,
decode_responses=True,
)
log.info(f"Redis connection established in {sys.argv[0]}!")
return client
def __get_async_cache() -> AsyncRedis:
if "pytest" in sys.modules:
# Only import fakeredis when running tests, as it is a test dependency.
from fakeredis import FakeAsyncRedis
return FakeAsyncRedis(version=7)
log.info(f"Connecting to redis in {sys.argv[0]}...")
# A separate client that auto-decodes responses is needed
client = AsyncRedis(
host=REDIS_HOST,
port=REDIS_PORT,
password=REDIS_PASSWORD,
username=REDIS_USERNAME,
db=REDIS_DB,
decode_responses=True,
)
log.info(f"Redis connection established in {sys.argv[0]}!")
return client
sync_cache = __get_sync_cache()
async_cache = __get_async_cache()