Проектная лаборатория
Собственный Redis
Этап 36 · Репликация
Обработка команд
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
На этом этапе вы реализуете обработку переданных команд на стороне реплики.
Обработка команд
Получив команду от ведущего, реплика обрабатывает её и применяет к своему состоянию. Это работает так же, как обычная команда клиента. Главное отличие: реплика не должна отправлять ответ ведущему.
Например, если ведущий передаёт реплике SET foo 1:
- Реплика должна установить значение
fooравным1в своей базе данных. - В отличие от команд обычных клиентов, ответ
+OK\r\nне отправляется.
Тесты
Тестирующая программа запустит ведущий Redis и вашу программу в качестве реплики так:
./your_program.sh --port <PORT> --replicaof "<MASTER_HOST> <MASTER_PORT>"Как и раньше, реплика должна завершить рукопожатие с ведущим и получить пустой файл RDB.
После получения RDB ведущий передаст вашей программе серию команд записи:
SET foo 1 # propagated from master to replica
SET bar 2 # propagated from master to replica
SET baz 3 # propagated from master to replicaЗатем тест отправит вашей программе команды GET, чтобы проверить правильность обработки:
$ redis-cli GET foo # expecting `1` back
$ redis-cli GET bar # expecting `2` back
# ... and so onПримечания
- Передаваемые команды кодируются как массивы RESP. Так,
SET foo 1передаётся как*3\r\n$3\r\nSET\r\n$3\r\nfoo\r\n$1\r\n1\r\n. - Не гарантируется, что команды будут приходить по одной. Один TCP-сегмент может содержать байты нескольких команд.
Проверка в вашей 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 yg4Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.