Проектная лаборатория

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

0 / 124этапов пройдено

Этап 66 · Оптимистическая блокировка

Команда WATCH

Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.

На этом этапе вы добавите команду WATCH.

Команда WATCH

Redis использует WATCH для оптимистической блокировки. Команда просит сервер следить за изменениями ключа. Позже, когда клиент выполняет группу команд как транзакцию, сервер проверяет, изменились ли отслеживаемые ключи за это время. Если да, вся транзакция отменяется.

Пример на практике:

Client A: WATCH counter          # "Tell me if this changes"
Client A: GET counter → 10       # Read current value
Client B: SET counter 20         # Another client sneaks in an update
Client A: MULTI                  # Start a transaction
Client A: SET counter 11         # Queue an update based on stale data
Client A: EXEC                   # Try to execute...
→ (nil)                          # Transaction aborted, counter changed

Полную последовательность вы реализуете позже. Пока достаточно разобрать WATCH и ответить +OK\r\n.

$ redis-cli WATCH key
OK

Тесты

Тестирующая программа запустит вашу программу так:

$ ./your_program.sh

Затем отправит WATCH:

$ redis-cli WATCH key

Будет проверено, что:

  • Ответ равен +OK\r\n (простая строка RESP).
  • Программа не падает и не выдаёт ошибок.

Примечания

  • WATCH принимает несколько ключей за раз, например WATCH key1 key2 key3, но пока достаточно одного ключа. Несколько ключей появятся позже.
  • Само отслеживание изменений и отмена транзакции появятся на следующих этапах.

Проверка в вашей IDE

Нужны Node.js, Git, Go 1.24+ для тестеров и инструменты выбранного языка. Тестеры загружаются и запускаются локально; отдельным проектам нужны дополнительные системные зависимости.

Настройка проекта и IDE

1. Создайте проект один раз

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

2. Откройте папку в IDE

cd ./my-redis

Реализуйте требования этапа в созданном проекте.

Запустите из папки проекта

node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage jb7

Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.

Результат проверки

go / ЛОКАЛЬНО

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

Здесь появится результат

Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.

GraphLMS — инженерная лаборатория роста