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

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

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

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

Отслеживание нескольких ключей

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

На этом этапе вы добавите отслеживание нескольких ключей.

Отслеживание нескольких ключей

Ранее было достаточно обрабатывать WATCH для одного ключа. Однако команда WATCH принимает несколько ключей сразу:

$ redis-cli
> WATCH foo bar baz
OK

Изменения отслеживаются для всех ключей. Если другой клиент изменит хотя бы один до EXEC, транзакция отменяется:

Client A: WATCH foo bar          # Monitor both keys
Client B: SET bar 300            # Modifies one of the watched keys
Client A: MULTI
Client A: SET foo 400            # Queued
Client A: EXEC                   # Transaction aborted, bar was modified

Тесты

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

$ ./your_program.sh

Тест создаст двух клиентов. Первый задаст два ключа, начнёт отслеживать оба и откроет транзакцию:

# Client 1
> SET foo 100        # → OK
> SET bar 200        # → OK
> WATCH foo bar      # → OK
> MULTI              # → OK
> SET bar 300        # → QUEUED

Второй изменит один из отслеживаемых ключей:

# Client 2
> SET foo 200        # → OK

Первый выполнит транзакцию, и тест проверит её отмену:

# Client 1
> EXEC               # → *-1\r\n (transaction aborted)
 
# Client 2
> GET bar            # → "200" (unchanged, transaction had no effect)

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

  • WATCH с несколькими ключами возвращает +OK\r\n.
  • EXEC возвращает нулевой массив RESP (*-1\r\n), если изменился любой отслеживаемый ключ.
  • Команды отменённой транзакции не оказали эффекта.

Проверка в вашей 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 fp0

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

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

go / ЛОКАЛЬНО

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

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

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

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