Проектная лаборатория
Собственный Redis
Этап 43 · Потоки
Создание потока
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
На этом этапе вы добавите создание потоков Redis командой XADD.
Потоки и записи Redis
Поток Redis хранит по заданному ключу последовательность записей в хронологическом порядке. Каждая запись состоит из уникального идентификатора и одной или нескольких пар «ключ — значение».
Например, поток данных с датчика температуры и влажности в реальном времени мог бы выглядеть так:
entries:
- id: 1526985054069-0 # (ID of the first entry)
temperature: 36 # (A key-value pair in the first entry)
humidity: 95 # (Another key-value pair)
- id: 1526985054079-0 # (ID of the second entry)
temperature: 37 # (A key-value pair in the second entry)
humidity: 94 # (Another key-value pair)
# ... (and so on)Структуру идентификаторов записей, таких как 1526985054069-0, мы подробнее рассмотрим позже.
Команда XADD
Команда XADD добавляет запись в конец потока. Если потока ещё нет, он создаётся автоматически.
Аргументы XADD: ключ потока, идентификатор записи и одна или несколько пар «ключ — значение»:
$ redis-cli XADD stream_key 1526919030474-0 temperature 36 humidity 95
"1526919030474-0"Возвращается идентификатор добавленной записи в виде объёмной строки.
XADD поддерживает и другие необязательные аргументы, но в этом задании мы их не рассматриваем.
XADD также поддерживает автоматическую генерацию идентификаторов, но пока вы будете работать только с явными идентификаторами, например 1526919030474-0.
Тесты
Тестирующая программа запустит вашу программу так:
$ ./your_program.shЗатем отправит серверу XADD и будет ожидать идентификатор в ответе. Например:
$ redis-cli XADD stream_key 0-1 foo bar
"0-1"В этом случае сервер должен ответить $3\r\n0-1\r\n: идентификатором 0-1 в формате объёмной строки.
После этого тест отправит TYPE, чтобы проверить тип ключа.
$ redis-cli TYPE stream_key
"stream"Сервер должен ответить +stream\r\n: значением stream в формате простой строки.
Примечания
- Команда
TYPEдолжна по-прежнему возвращатьstringиnoneв соответствующих случаях.streamвозвращается только для ключей-потоков.
Проверка в вашей 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 cf6Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.