Проектная лаборатория

Собственный Redis

0 / 124этапов пройдено

Этап 45 · Потоки

Частично автоматические идентификаторы

Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.

На этом этапе вы расширите XADD, добавив автоматическую генерацию порядкового номера идентификатора записи.

Напоминание о форматах идентификатора в XADD

Команда XADD принимает идентификаторы в трёх форматах:

  • Явный (1526919030473-0) — реализовано ранее.
  • Автоматический порядковый номер (1526919030474-*).
  • Автоматические время и порядковый номер (*).

На этом этапе вы реализуете второй вариант: автоматически генерируется только порядковый номер.

Автоматическая генерация порядковых номеров

Redis назначает порядковый номер по следующим правилам:

  • Если в потоке нет записей с заданной временной частью, номер начинается с 0.
  • Если записи с такой временной частью уже есть, новый номер равен последнему плюс 1.
  • Единственное исключение — временная часть 0: для неё начальный номер равен 1.

Пример добавления записи с * вместо порядкового номера:

$ redis-cli XADD some_key "1-*" foo bar
"1-0" # The sequence number is 0 if no prior entries exist
 
$ redis-cli XADD some_key "1-*" bar baz
"1-1" # Adding another entry will increment the sequence number

Тесты

Тестирующая программа запустит вашу программу так:

$ ./your_program.sh

Затем отправит XADD с * вместо порядкового номера.

$ redis-cli XADD stream_key 0-* foo bar

Сервер должен ответить $3\r\n0-1\r\n: значением 0-1 в формате объёмной строки.

Далее тест отправит ещё одну XADD с * вместо порядкового номера, но со случайным числом во временной части.

$ redis-cli XADD stream_key 5-* foo bar

Сервер должен ответить $3\r\n5-0\r\n: значением 5-0 в формате объёмной строки.

После этого тест повторит ту же команду.

$ redis-cli XADD stream_key 5-* bar baz

Сервер должен ответить $3\r\n5-1\r\n: значением 5-1 в формате объёмной строки.

Примечания

  • Временная часть в тесте будет случайной; в примере использовано 5.

Проверка в вашей IDE

Нужны Node.js, Git, Go 1.24+ для тестеров и инструменты выбранного языка. Тестеры загружаются и запускаются локально; отдельным проектам нужны дополнительные системные зависимости.

Настройка проекта и IDE

1. Создайте проект один раз

node '/opt/graphlms/tools/project-lab/cli.mjs' init redis ./my-redis --language go

2. Откройте папку в IDE

cd ./my-redis

Реализуйте требования этапа в созданном проекте.

Запустите из папки проекта

node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage yh3

Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.

Результат проверки

go / ЛОКАЛЬНО

Подключение к локальной проверке…

Здесь появится результат

Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.

GraphLMS — инженерная лаборатория роста