Проект

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

Команды Redis, структуры данных, хранение и репликация.

Основа
0 из 7
Всего
0 из 124

Расширение «Репликация», этап 13 из 18. Сложно

Обработка команд

На этом этапе вы реализуете обработку переданных команд на стороне реплики.

Обработка команд

Получив команду от ведущего, реплика обрабатывает её и применяет к своему состоянию. Это работает так же, как обычная команда клиента. Главное отличие: реплика не должна отправлять ответ ведущему.

Например, если ведущий передаёт реплике 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-сегмент может содержать байты нескольких команд.

Перевод задания CodeCrafters. Примеры подготовлены для Go.

Проверить этап

Проверка идёт на вашем компьютере: CLI скачивает официальный тестер этапа и запускает его против вашего кода. Код на сервер не отправляется.

Проект ещё не создан?

1. Скачайте CLI

graphlms-project-lab.tar.gz или .zip. Нужны Node.js 18+, Git и Go (официальные тестеры написаны на Go), а также инструменты выбранного языка. macOS и Linux, на Windows — WSL.

2. Распакуйте архив

tar -xzf graphlms-project-lab.tar.gz

3. Создайте проект рядом с ним

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

4. Откройте папку проекта в редакторе

cd my-redis

Из папки проекта запустите проверку

node ../graphlms-project-lab/cli.mjs test --stage yg4

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

Обработка команд: Собственный Redis · GraphLMS