Выбор ответа Middle NoSQL и выбор хранилища спрашивают часто обновлено

Почему команды Redis атомарны

Вопрос

Почему INCR counter в Redis безопасен при тысячах параллельных клиентов?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Redis выполняет команды в одном потоке по очереди. Основной цикл Redis обрабатывает команды последовательно в одном потоке (сетевой ввод-вывод в новых версиях может идти в нескольких потоках, но выполнение команд остаётся последовательным), поэтому каждая команда атомарна.

Варианты ответа

  1. Redis выполняет команды в одном потоке по очередиправильный ответ
  2. Redis берёт блокировку на каждый ключ, как строковая блокировка в PostgreSQL
  3. Redis хранит счётчики в транзакционном журнале и сериализует их
  4. INCR не безопасен, нужен MULTI/EXEC вокруг каждой команды

Разбор

Основной цикл Redis обрабатывает команды последовательно в одном потоке (сетевой ввод-вывод в новых версиях может идти в нескольких потоках, но выполнение команд остаётся последовательным), поэтому каждая команда атомарна. Пока выполняется INCR, другая команда не вклинится. Блокировок по ключам нет, они не нужны. MULTI/EXEC нужен, чтобы атомарно выполнить несколько команд, одна команда атомарна и так. Журнал AOF отвечает за сохранность, а не за атомарность.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.