Redis — максимальные каналы / темы для паба / суб

#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 автоматически удаляет канал.