Проектная лаборатория
Собственный Redis
Этап 51 · Потоки
Чтение нескольких потоков через XREAD
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
На этом этапе вы добавите чтение нескольких потоков командой XREAD.
Команда XREAD для нескольких потоков
При чтении нескольких потоков команда XREAD после ключевого слова STREAMS передаётся список ключей потоков, а затем соответствующий список идентификаторов записей для каждого потока.
Формат команды:
XREAD STREAMS <key1> <key2> ... <id1> <id2> ...Ответ сервера по-прежнему представляет собой массив RESP с потоками, где:
- Каждый поток — массив из двух элементов: ключ потока и прочитанные записи.
- Порядок потоков в ответе должен совпадать с порядком в команде.
Тесты
Тестирующая программа запустит вашу программу так:
$ ./your_program.shЗатем отправит несколько XADD, добавляя записи в разные потоки.
$ redis-cli XADD stream_key 0-1 temperature 95
$ redis-cli XADD other_stream_key 0-2 humidity 97После этого отправит серверу XREAD для нескольких потоков.
$ redis-cli XREAD streams stream_key other_stream_key 0-0 0-1Сервер должен ответить массивом RESP с результатами для всех указанных потоков.
Для примера выше ответ будет таким, в формате массива RESP:
[
[
"stream_key",
[
[
"0-1",
[
"temperature",
"95"
]
]
]
],
[
"other_stream_key",
[
[
"0-2",
[
"humidity",
"97"
]
]
]
]
]Проверка в вашей 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 ru9Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.