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/