Я проверяю потоки блокировки Redis в рамках создания приложения приватного чата с сохранением состояния.
Документация гласит:
Обратите внимание, что при использовании опции BLOCK у нас нет использовать специальный идентификатор $. Мы можем использовать любой действительный идентификатор. Если команда сможет обслуживать наш запрос немедленно, без блокировки, она сделает это, в противном случае она заблокируется. Обычно, если мы хотим использовать поток, начиная с новых записей, мы начинаем с идентификатора $, а после этого продолжаем использовать идентификатор последнего полученного сообщения для следующего вызова и т. Д.
Как я понимаю, мы будем использовать последний идентификатор последнего полученного сообщения, чтобы не пропустить сообщения в период между:
- Операция разблокирования
- Выполнение следующего вызова
В документации не упоминается, будет ли блокироваться и этот второй вызов.
Упоминается следующее:
Обратите внимание, что когда опция BLOCK используется, мы не должны использовать специальный идентификатор $. Мы можем использовать любой действительный идентификатор. Если команда может обслуживать наш запрос немедленно, без блокировки, она будет делать это, в противном случае она будет блокироваться.
Поэтому, если между временем появилось новое сообщение, поток просто возвратит их, и НЕ блокировать поток после этого.
Это я не понимаю, так как целью было бы:
- Блокировать поток
- Получать новые сообщения
- Разблокировать
- Получить поток с указанием последнего полученного идентификатора
- -> Повторить с новым блоком для получения новых сообщений, отправленных в поток
Означает ли это, что вы должны выполнить новая операция блокировки с $
каждый раз, когда вы получили новое сообщение?
Нет ли способа просто подписаться на поток один раз и просто продолжать получать обновления, то есть есть ли стандартизированный способ достижения желаемого поведения без нужно писать этот низкоуровневый код?
Как я понимаю, операция BLOCK
должна обеспечивать некоторое tail
поведение.