redis-py 8 поставил дефолт `max_connections=100`, а у нас на этом пуле висят не только команды, но и долгоживущие pub/sub-подписки комнаты — по одной на каждого участника, пока он в конференции. Сотый участник на воркер выгребал пул, и WS-хендшейк падал уже на `hgetall` очереди рук с `MaxConnectionsError`. Второй потолок того же рода, что и пул БД, только этажом ниже. Воспроизведён локально: при 99 одновременных WS вход переставал работать; с `redis_max_connections=500` те же 120 подключений проходят без единой ошибки. Соединения создаются по мере надобности, поэтому сам по себе поднятый лимит ничего не стоит.
17 lines
646 B
Python
17 lines
646 B
Python
"""Настройка асинхронного Redis клиента."""
|
||
|
||
from redis.asyncio import Redis
|
||
|
||
from core.config import get_settings
|
||
|
||
settings = get_settings()
|
||
|
||
redis_client: Redis = Redis.from_url(
|
||
settings.redis_url,
|
||
decode_responses=True,
|
||
# Размер пула задаём явно: дефолт redis-py (100) рассчитан на команды, а у
|
||
# нас на нём же висят долгоживущие pub/sub-подписки комнаты — по одной на
|
||
# участника (см. `core/config.py`, `redis_max_connections`).
|
||
max_connections=settings.redis_max_connections,
|
||
)
|