Instade of move Я хочу скопировать все мои ключи из определенного db в другой. Возможно ли в redis, если да, то как?
Скопируйте все ключи с одного db на другой в redis
Ответ 1
Если вы не можете использовать MIGRATE COPY из-за своей версии redis, вы можете скопировать каждый ключ отдельно, что занимает больше времени, но не требует входа в систему на самих машинах и позволяет перемещать данные из одной базы данных. другому. Вот как я копирую все ключи из одной базы данных в другую (но без сохранения ttls)
#set connection data accordingly
source_host=localhost
source_port=6379
source_db=0
target_host=localhost
target_port=6379
target_db=1
#copy all keys without preserving ttl!
redis-cli -h $source_host -p $source_port -n $source_db keys \* | while read key; do echo "Copying $key"; redis-cli --raw -h $source_host -p $source_port -n $source_db DUMP "$key" | head -c -1|redis-cli -x -h $target_host -p $target_port -n $target_db RESTORE "$key" 0; done
Ключи не будут перезаписаны, для этого удалите ключ перед копированием или очистите всю базу данных перед запуском.
Ответ 2
Не напрямую. Я бы предложил использовать всегда удобный пакет redis-rdb-tools (от Sripathi Krishnan) для извлечения данных из нормального дампа rdb и повторного его добавления в другой экземпляр.
Ответ 3
Я знаю, что это устарело, но для тех, кто приехал сюда, Google:
Я только что опубликовал утилиту интерфейса командной строки для npm и github, которая позволяет копировать ключи, соответствующие данному шаблону (даже *) из одной базы данных Redis в другую.
Вы можете найти утилиту здесь:
Ответ 4
redis-cli -a $source_password -p $source_port -h $source_ip keys /*| while read key;
do echo "Copying $key";
redis-cli --raw -a $source_password -h $source_ip -p $source_port -n $dbname DUMP "$key"| head -c -1| redis-cli -x -a $destination_password -h $destination_IP -p $destination_port RESTORE "$key" 0;
Ответ 5
Копирует все ключи из номера базы данных 0 в номер базы данных 1 на локальном хосте.
redis-cli --scan | xargs redis-cli migrate localhost 6379 '' 1 0 copy keys
Если вы используете один и тот же сервер/порт, вы получите ошибку тайм-аута, но ключи, похоже, все равно будут копироваться. Ошибка GitHub Redis # 1903
Ответ 6
Если вы переносите ключи внутри одного и того же модуля redis, вы можете использовать для этого внутреннюю команду MOVE (конвейеризация для большей скорости):
#!/bin/bash
#set connection data accordingly
source_host=localhost
source_port=6379
source_db=4
target_db=0
total=$(redis-cli -n 4 keys \* | sed 's/^/MOVE /g' | sed 's/$/ '$target_db'/g' | wc -c)
#copy all keys without preserving ttl!
time redis-cli -h $source_host -p $source_port -n $source_db keys \* | \
sed 's/^/MOVE /g' | sed 's/$/ 0/g' | \
pv -s $total | \
redis-cli -h $source_host -p $source_port -n $source_db >/dev/null
Ответ 7
Вы можете просто сделать это, он переместит все ключи с db 1 на db 3
redis-cli -n 1 keys '*' | xargs -I % redis-cli move % 3 > /dev/null
Ответ 8
Попробуйте использовать дамп, чтобы сначала сбросить все ключи, а затем восстановить тот же
Ответ 9
Насколько я понимаю, вам нужно скопировать ключи из определенного БД (например, 5) в конкретный БД, скажем 10. Если это так, вы можете использовать redis database dumper (https://github.com/r043v/rdd). Хотя в соответствии с документацией у него есть переключатель (-d), чтобы выбрать базу данных для работы, но не работал у меня, так что я сделал
1.) Отредактируйте файл rdd.c и найдите функцию int main (int argc, char argv)
2.) Измените БД в соответствии с вашим требованием
3.) скомпилируйте src ** make
4.) Сбросьте все ключи, используя ./rdd -o "save.rdd"
5.) Еще раз отредактируйте файл rdd.c и измените DB
6.) Сделайте еще раз
7.) Импорт с помощью ./rdd "save.rdd" -o insert -s "IP" -p "Порт"