Проектная лаборатория
Собственный Redis
Этап 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 go2. Откройте папку в IDE
cd ./my-redisРеализуйте требования этапа в созданном проекте.
Запустите из папки проекта
node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage yh3Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.