Проектная лаборатория
Собственный Redis
Этап 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 go2. Откройте папку в IDE
cd ./my-redisРеализуйте требования этапа в созданном проекте.
Запустите из папки проекта
node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage jb7Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.