Spec-Zone.ru › Redis

MIGRATE

MIGRATE
Синтаксис
MIGRATE host port <key | ""> destination-db timeout [COPY] [REPLACE]
  [AUTH password | AUTH2 username password] [KEYS key [key ...]]
Доступно с версии:
2.6.0
Сложность по времени:
Эта команда фактически выполняет DUMP+DEL в исходном экземпляре и RESTORE в целевом экземпляре. См. страницы этих команд для сложности по времени. Также выполняется передача данных между двумя экземплярами со сложностью O(N).
Категории ACL:
@keyspace, @write, @slow, @dangerous,

Атомарно переносит ключ из исходного экземпляра Redis в целевой экземпляр Redis. При успешном выполнении ключ удаляется из исходного экземпляра и гарантированно существует в целевом экземпляре.

Команда атомарна и блокирует оба экземпляра на время, необходимое для переноса ключа. В любой момент времени ключ будет существовать либо в одном, либо в другом экземпляре, если только не произойдет ошибка по таймауту. В версиях 3.2 и выше можно передавать несколько ключей в одном вызове MIGRATE, передавая пустую строку ("") в качестве ключа и добавляя KEYS предложение.

Команда внутренне использует DUMP для генерации сериализованной версии значения ключа и RESTORE для создания ключа в целевом экземпляре. Исходный экземпляр действует как клиент для целевого экземпляра. Если целевой экземпляр возвращает OK для команды RESTORE, исходный экземпляр удаляет ключ с помощью DEL.

Таймаут определяет максимальное время бездействия в любой момент взаимодействия с целевым экземпляром в миллисекундах. Это означает, что операция не должна быть завершена в течение указанного количества миллисекунд, но передача должна прогрессировать без блокировки более чем на указанное количество миллисекунд.

MIGRATE необходимо выполнить операции ввода-вывода и учесть указанный таймаут. При возникновении ошибки ввода-вывода во время переноса или при достижении таймаута операция прерывается и возвращается специальная ошибка - IOERR. В этом случае возможны следующие два варианта:

  • Ключ может присутствовать в обоих экземплярах.
  • Ключ может присутствовать только в исходном экземпляре.

Ключ не может быть потерян в случае таймаута, но клиент, вызывающий MIGRATE, в случае ошибки таймаута должен проверить, присутствует ли ключ также в целевом экземпляре и действовать соответственно.

При возвращении любой другой ошибки (начинающейся с ERR) MIGRATE гарантирует, что ключ по-прежнему присутствует только в исходном экземпляре (если ключ с тем же именем не присутствовал уже в целевом экземпляре).

Если в исходном экземпляре нет ключей для переноса, возвращается NOKEY. Поскольку отсутствие ключей возможно в нормальных условиях, например, из-за истечения срока действия, NOKEY не является ошибкой.

Перенос нескольких ключей одним вызовом команды

Начиная с Redis 3.0.6 MIGRATE поддерживает новый режим массового переноса, который использует конвейерную передачу для переноса нескольких ключей между экземплярами без потери времени на обратные запросы и других накладных расходов, возникающих при перемещении каждого ключа с помощью отдельного вызова MIGRATE.

Для активации этого режима используется опция KEYS, а обычный аргумент key устанавливается в пустую строку. Фактические имена ключей будут указаны после аргумента KEYS, как в приведенном ниже примере:

MIGRATE 192.168.1.34 6379 "" 0 5000 KEYS key1 key2 key3

Когда используется этот режим, код состояния NOKEY возвращается только в том случае, если ни один из ключей не присутствует в экземпляре. В противном случае команда выполняется, даже если существует только один ключ.

Параметры

  • COPY — Не удалять ключ из локального экземпляра.
  • REPLACE — Заменять существующий ключ в удаленном экземпляре.
  • KEYS — Если аргумент ключа пустая строка, команда вместо этого перенесет все ключи, которые следуют за опцией KEYS (подробнее см. выше).
  • AUTH — Авторизоваться с заданным паролем в удаленном экземпляре.
  • AUTH2 — Авторизоваться с заданной парой имя пользователя/пароль (стиль авторизации ACL Redis 6 или выше).

Возвращаемое значение

Простой строковый ответ: Команда возвращает OK при успешном выполнении или NOKEY , если в исходном экземпляре не было найдено ключей.

История

  • Начиная с версии Redis 3.0.0: Добавлены параметры COPY и REPLACE.
  • Начиная с версии Redis 3.0.6: Добавлен параметр KEYS.
  • Начиная с версии Redis 4.0.7: Добавлен параметр AUTH.
  • Начиная с версии Redis 6.0.0: Добавлен параметр AUTH2.

© 2006–2022 Salvatore Sanfilippo
Licensed under the Creative Commons Attribution-ShareAlike License 4.0.
https://redis.io/commands/migrate/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API