#redis
#redis
Вопрос:
Я пытаюсь создать приложение для чатов и использовать сообщения redis pub / sub, распространяющие сообщения между подписчиками. Каждый конференц-зал — это 1 канал. Проблема в том, что со временем у меня может быть бесконечное количество каналов.
- Есть ли какое-либо ограничение на максимальное количество каналов, которые я могу иметь в redis?
- Есть ли какой-либо способ автоматического истечения срока действия / удаления каналов, которые не получили никаких сообщений для публикации?
Ответ №1:
Есть ли какое-либо ограничение на максимальное количество каналов, которые я могу иметь в redis?
Redis не устанавливает никаких ограничений на количество каналов. Каналы сохраняются в хэш, размер которого имеет тип long
. Таким образом, теоретически, ограничение распространяется 2**63
на 64-битную машину. Однако, поскольку ваша память ограничена, вы не можете достичь предела. Одним словом, практически нет ограничений.
Есть ли какой-либо способ автоматического истечения срока действия / удаления каналов, которые не получили никаких сообщений для публикации?
Это невозможно сделать. Redis удаляет канал, только когда все клиенты канала отписались от него, т.е. Когда у канала нет подписчиков, Redis автоматически удаляет канал. Если на него подписан хотя бы один клиент, Redis сохранит канал, даже если на нем не опубликовано сообщение.
Комментарии:
1. «Это невозможно сделать. Redis удаляет канал, только когда все клиенты канала отписались от него, т.е. Когда у канала нет подписчиков, Redis автоматически удаляет канал. Если на него подписался хотя бы один клиент, Redis сохранит канал, даже если на нем не опубликовано сообщение «. — есть ли какая-нибудь ссылка на документ, которой вы могли бы поделиться для этого?
2. @RamPrakash Я не уверен, есть ли какой-либо документ об этом. Тем не менее, исходный код объясняет все 🙂 Канал работает как Redis
LIST
, когда вы открываете все элементы в СПИСКЕ, Redis автоматически удаляет СПИСОК. Аналогично, когда все клиенты отписались от канала, Redis автоматически удаляет канал.