File size: 1,529 Bytes
b143975
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
"""
Redis connection management for Analytics Microservice.
"""
import redis.asyncio as redis
from app.core.logging import get_logger
from app.core.config import settings

logger = get_logger(__name__)

redis_client: redis.Redis = None


async def connect_to_redis():
    global redis_client
    try:
        pool_params = {
            "host": settings.REDIS_HOST,
            "port": settings.REDIS_PORT,
            "db": settings.REDIS_DB,
            "decode_responses": True,
            "max_connections": 5,
            "socket_keepalive": True,
            "socket_connect_timeout": 5,
            "socket_timeout": 5,
            "retry_on_timeout": False,
            "health_check_interval": 30,
        }
        if settings.REDIS_PASSWORD:
            pool_params["password"] = settings.REDIS_PASSWORD

        pool = redis.ConnectionPool(**pool_params)
        redis_client = redis.Redis(connection_pool=pool)
        await redis_client.ping()
        logger.info("Redis connected successfully", extra={"event": "redis_connected"})
    except Exception as e:
        logger.warning("Redis connection failed - continuing without cache", extra={"event": "redis_connect_failure", "error": str(e)})
        redis_client = None


async def close_redis_connection():
    global redis_client
    if redis_client:
        await redis_client.aclose()
        redis_client = None
        logger.info("Redis connection closed", extra={"event": "redis_disconnected"})


def get_redis() -> redis.Redis:
    return redis_client