Redis блокирует потоки: используя последний идентификатор - PullRequest
0 голосов
/ 01 апреля 2020

Я проверяю потоки блокировки Redis в рамках создания приложения приватного чата с сохранением состояния.
Документация гласит:

Обратите внимание, что при использовании опции BLOCK у нас нет использовать специальный идентификатор $. Мы можем использовать любой действительный идентификатор. Если команда сможет обслуживать наш запрос немедленно, без блокировки, она сделает это, в противном случае она заблокируется. Обычно, если мы хотим использовать поток, начиная с новых записей, мы начинаем с идентификатора $, а после этого продолжаем использовать идентификатор последнего полученного сообщения для следующего вызова и т. Д.

Как я понимаю, мы будем использовать последний идентификатор последнего полученного сообщения, чтобы не пропустить сообщения в период между:

  • Операция разблокирования
  • Выполнение следующего вызова

В документации не упоминается, будет ли блокироваться и этот второй вызов.
Упоминается следующее:

Обратите внимание, что когда опция BLOCK используется, мы не должны использовать специальный идентификатор $. Мы можем использовать любой действительный идентификатор. Если команда может обслуживать наш запрос немедленно, без блокировки, она будет делать это, в противном случае она будет блокироваться.

Поэтому, если между временем появилось новое сообщение, поток просто возвратит их, и НЕ блокировать поток после этого.

Это я не понимаю, так как целью было бы:

  • Блокировать поток
  • Получать новые сообщения
  • Разблокировать
  • Получить поток с указанием последнего полученного идентификатора
  • -> Повторить с новым блоком для получения новых сообщений, отправленных в поток

Означает ли это, что вы должны выполнить новая операция блокировки с $ каждый раз, когда вы получили новое сообщение?
Нет ли способа просто подписаться на поток один раз и просто продолжать получать обновления, то есть есть ли стандартизированный способ достижения желаемого поведения без нужно писать этот низкоуровневый код?
Как я понимаю, операция BLOCK должна обеспечивать некоторое tail поведение.

...