Проектная лаборатория
Собственный Redis
Этап 53 · Потоки
Блокирующее чтение без ограничения времени
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
На этом этапе вы добавите бессрочное блокирующее ожидание в XREAD.
Бессрочное ожидание в XREAD
Напомним, что XREAD поддерживает блокировку через параметр BLOCK <milliseconds>.
Если milliseconds равен 0, XREAD блокируется бессрочно, пока в поток или потоки не будет добавлена новая запись.
Рассмотрим двух отдельных клиентов. Первый отправляет блокирующую XREAD, указав время 0:
$ redis-cli XREAD BLOCK 0 streams some_key 1526985054069-0Этот клиент останется заблокированным до появления новой записи.
Если второй клиент в любой момент добавит запись в поток:
$ other-redis-cli XADD some_key 1526985054079-0 temperature 37 humidity 94
"1526985054079-0"Команда XREAD первого клиента сразу разблокируется и вернёт новую запись:
1) 1) "some_key"
2) 1) 1) 1526985054079-0
2) 1) temperature
2) 37
3) humidity
4) 94Тесты
Тестирующая программа запустит вашу программу так:
$ ./your_program.shЗатем добавит запись в поток.
$ redis-cli XADD stream_key 0-1 temperature 96После этого отправит серверу XREAD с бессрочным ожиданием:
$ redis-cli XREAD BLOCK 0 streams stream_key 0-1Тест подождёт 1000 миллисекунд, чтобы убедиться, что клиент остаётся заблокированным и не завершается по тайм-ауту. Затем добавит ещё одну запись:
$ redis-cli XADD stream_key 0-2 temperature 95Сервер должен вернуть следующий массив RESP:
[
[
"stream_key",
[
[
"0-2",
[
"temperature",
"95"
]
]
]
]
]Проверка в вашей IDE
Нужны Node.js, Git, Go 1.24+ для тестеров и инструменты выбранного языка. Тестеры загружаются и запускаются локально; отдельным проектам нужны дополнительные системные зависимости.
Настройка проекта и IDE
1. Создайте проект один раз
node '/opt/graphlms/tools/project-lab/cli.mjs' init redis ./my-redis --language go2. Откройте папку в IDE
cd ./my-redisРеализуйте требования этапа в созданном проекте.
Запустите из папки проекта
node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage hw1Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.