Проектная лаборатория
Собственный Redis
Этап 64 · Транзакции
Ошибки внутри транзакций
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
На этом этапе вы добавите обработку ошибок внутри транзакции.
Ошибки внутри транзакций
Если при выполнении транзакции команда завершается ошибкой, ошибка сохраняется и включается в ответ EXEC. Остальные команды транзакции всё равно выполняются.
Подробнее об этом поведении — в официальной документации Redis.
Пример:
$ redis-cli
> MULTI
OK
> SET foo xyz
QUEUED
> INCR foo
QUEUED
> SET bar 7
> EXEC
1) OK
2) (error) ERR value is not an integer or out of range
3) OKОшибка команды INCR возвращается вторым элементом массива. Третья команда (SET bar 7) всё равно успешно выполняется.
Тесты
Тестирующая программа запустит вашу программу так:
$ ./your_program.shЗатем подключится как клиент Redis и отправит несколько команд через одно соединение:
$ redis-cli
> SET foo abc
OK
> SET bar 41
OK
> MULTI
OK
> INCR foo
QUEUED
> INCR bar
QUEUED
> EXEC
1) (error) ERR value is not an integer or out of range
2) (integer) 42Ожидаемый ответ EXEC — массив RESP с ответами команд из очереди. Точные байты:
*2\r\n-ERR value is not an integer or out of range\r\n:42\r\nТест также проверит, что последняя команда успешно выполнена и ключ bar существует:
$ redis-cli
> GET foo (expecting "$3\r\nabc\r\n" as the response)
> GET bar (expecting "$2\r\n42\r\n" as the response)Примечания
- Некоторые ошибки команд, например синтаксические, приводят к полной отмене транзакции. В этом задании они не рассматриваются.
Проверка в вашей 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 sg9Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.