Проектная лаборатория
Собственный Redis
Этап 71 · Оптимистическая блокировка
Команда UNWATCH
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
На этом этапе вы добавите команду UNWATCH.
Команда UNWATCH
Команда UNWATCH очищает все отслеживаемые ключи текущего соединения. Ключи, ранее зарегистрированные через WATCH, больше не отслеживаются, и их изменения не влияют на будущие транзакции.
$ redis-cli
> WATCH foo bar
OK
> UNWATCH
OKОтвет всегда равен +OK\r\n.
После UNWATCH следующая транзакция выполняется обычным образом, даже если другой клиент изменит ранее отслеживаемые ключи.
Тесты
Тестирующая программа запустит вашу программу так:
$ ./your_program.shТест создаст двух клиентов. Первый задаст два ключа и начнёт их отслеживать:
# Client 1
> SET foo 100
OK
> SET bar 200
OK
> WATCH foo bar
OKВторой изменит один из этих ключей:
# Client 2
> SET foo 200
OKПервый снимет наблюдение со всех ключей, затем начнёт и выполнит транзакцию:
# Client 1
> UNWATCH
OK
> MULTI
OK
> SET foo 400
QUEUED
> EXEC
1) OK # transaction succeeds, keys were unwatched
# Client 2
> GET foo
"400" # confirms the transaction's write took effectБудет проверено, что:
UNWATCHвозвращает+OK\r\n.EXECуспешна, несмотря на изменение ранее отслеживаемого ключа, посколькуUNWATCHочистила состояние наблюдения.- Команды транзакции применены.
Примечания
UNWATCHне принимает аргументы и всегда очищает все отслеживаемые ключи соединения.UNWATCHдолжна работать и без отслеживаемых ключей, просто возвращая+OK\r\n.
Проверка в вашей 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 bn1Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.