Получить доступ

Что обязательно при реализации распределённой блокировки на Redis?

SeniorRedis и кэшированиеRedis
Ещё спрашивают так:
  • Как сделать распределённую блокировку на Redis?
  • Что такое Redlock?
Коротко

SET lock:x <уникальный токен> NX PX 30000 — захват с TTL (чтобы упавший клиент не держал вечно); снятие — Lua-скриптом только своего токена.

  • Без уникального токена можно снять чужую блокировку после истечения своей
  • Пауза GC дольше TTL — два владельца одновременно
  • Для корректности — fencing token, проверяемый хранилищем

А ещё Для эффективности (не делать работу дважды) Redis-блокировки достаточно; для корректности — консенсус

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Захват делают атомарно — установкой ключа с условием отсутствия и сроком жизни; освобождение обязано проверять владельца, что требует скрипта, иначе между проверкой и удалением вклинится чужой захват. Самое важное — честно понимать границы гарантии: если владелец задержался на паузе сборщика мусора дольше TTL, блокировка истечёт, её возьмёт другой, и оба будут считать себя владельцами. Поэтому такой механизм годится для оптимизации (не выполнять работу дважды), но не для случаев, где двойное выполнение недопустимо — там нужна защита на стороне самого ресурса: условная запись по версии, ограничение уникальности или монотонно растущий маркер, который ресурс проверяет.

Что хотят услышать

  • SET NX с TTL и уникальным токеном.
  • Атомарное снятие своей блокировки.
  • Почему взаимное исключение не абсолютно, fencing.

Частые ошибки

  • Считать распределённую блокировку гарантией строгого взаимного исключения.
  • Удалять ключ блокировки без проверки владельца.

Проверьте себя

Несколько верных вариантов. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓У блокировки должен быть TTL, иначе падение владельца заблокирует ресурс навсегда
  • ✓Освобождать блокировку нужно только своим уникальным токеном, чтобы не снять чужую
  • ✓Нужно понимать, что при паузе владельца дольше TTL двое могут считать себя владельцами — для строгой корректности требуется защита на стороне ресурса
  • ✗Достаточно команды SET без каких-либо дополнительных условий

Что спросят дальше

  • Что такое fencing token и зачем он нужен?
  • Чем условная запись по версии надёжнее внешней блокировки?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем