49 lines
1.2 KiB
Python
49 lines
1.2 KiB
Python
import redis.asyncio as redis
|
|
|
|
from .config import settings
|
|
from .logging import get_logger
|
|
|
|
logger = get_logger(__name__)
|
|
|
|
class RedisConnection:
|
|
pool: redis.ConnectionPool = None
|
|
client: redis.Redis = None
|
|
|
|
|
|
redis_conn = RedisConnection()
|
|
|
|
|
|
async def connect_to_redis():
|
|
logger.info("Connecting to Redis...")
|
|
redis_conn.pool = redis.ConnectionPool.from_url(
|
|
settings.redis_url,
|
|
encoding="utf-8",
|
|
decode_responses=True,
|
|
max_connections=20,
|
|
)
|
|
redis_conn.client = redis.Redis(connection_pool=redis_conn.pool)
|
|
|
|
# Test connection
|
|
try:
|
|
await redis_conn.client.ping()
|
|
logger.info("Successfully connected to Redis")
|
|
except Exception as e:
|
|
logger.error(f"Failed to connect to Redis: {e}")
|
|
raise
|
|
|
|
|
|
async def close_redis_connection():
|
|
logger.info("Closing Redis connection...")
|
|
if redis_conn.client:
|
|
await redis_conn.client.close()
|
|
if redis_conn.pool:
|
|
await redis_conn.pool.disconnect()
|
|
|
|
|
|
async def get_redis() -> redis.Redis:
|
|
return redis_conn.client
|
|
|
|
|
|
def get_redis_client() -> redis.Redis:
|
|
"""Get the Redis client synchronously (for middleware setup)."""
|
|
return redis_conn.client
|