Проектная лаборатория
Собственный Redis
Этап 46 · Потоки
Полностью автоматические идентификаторы
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
На этом этапе вы расширите XADD, добавив автоматическую генерацию идентификаторов записей.
Напоминание о форматах идентификатора в XADD
Команда XADD принимает идентификаторы в трёх форматах:
- Явный (
1526919030473-0) — реализовано ранее. - Автоматический порядковый номер (
1526919030474-*) — реализовано ранее. - Автоматические время и порядковый номер (
*).
На этом этапе вы реализуете третий вариант: идентификатор генерируется целиком.
Автоматическая генерация идентификаторов
Когда в XADD используется *, сервер автоматически создаёт уникальный идентификатор новой записи:
- Временная часть — текущее время Unix в миллисекундах, порядковый номер —
0. - Если запись с такой временной меткой уже есть, сервер увеличивает порядковый номер на
1.
Например:
> XADD stream_key * foo bar
"1526919030474-0"Тесты
Тестирующая программа запустит вашу программу так:
$ ./your_program.shЗатем создаст запись с идентификатором *.
$ redis-cli XADD stream_key * foo barСервер должен ответить строкой вида $15\r\n1526919030474-0\r\n: идентификатором 1526919030474-0 в формате объёмной строки.
Примечания
- Временная часть должна быть текущим временем Unix в миллисекундах, а не секундах.
- Тест не проверяет случай совпадения временной части и увеличения порядкового номера. Надёжно проверить его сложно: пришлось бы отправлять две команды в одну миллисекунду.
Проверка в вашей 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 xu6Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.