web-dev-qa-db-fra.com

Copier toutes les clés d’un db à un autre dans redis

Au lieu de déplacer je veux copier toutes mes clés d'une base de données particulière à une autre ..____. Est-il possible dans Redis si oui que comment? 

16
Subo

Si vous ne pouvez pas utiliser MIGRATE COPY à cause de votre version Redis, vous voudrez peut-être copier chaque clé séparément, ce qui prend plus de temps mais ne nécessite pas de vous connecter aux machines elles-mêmes et vous permet de déplacer les données d'une base de données vers une autre. un autre . Voici comment je copie toutes les clés d'une base de données à une autre (mais sans conserver les 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

Les clés ne seront pas écrasées. Pour cela, supprimez-les avant de copier ou videz la base de données avant de commencer.

23
estani

Je sais que c'est vieux, mais pour ceux qui viennent ici de Google:

Je viens de publier un utilitaire d'interface de ligne de commande pour npm et github qui vous permet de copier des clés correspondant à un modèle donné (même *) d'une base de données Redis à une autre.

Vous pouvez trouver l'utilitaire ici:

https://www.npmjs.com/package/redis-utils-cli

0
Gabriel McAdams

Si vous migrez des clés à l'intérieur du même moteur Redis, vous pouvez utiliser la commande interne MOVE pour cela (traitement en pipeline pour plus de rapidité):

#!/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
0
Arie Skliarouk

Pas directement. Je suggérerais d'utiliser le paquetage toujours pratique redis-rdb-tools (de Sripathi Krishnan) pour extraire les données d'un vidage rdb normal et les réinjecter dans un autre cas.

Voir https://github.com/sripathikrishnan/redis-rdb-tools

0
Didier Spezia
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;
0
sourabhK

Copie toutes les clés de la base de données 0 vers la base de données 1 sur localhost.

redis-cli --scan | xargs redis-cli migrate localhost 6379 '' 1 0 copy keys

Si vous utilisez le même serveur/port, vous obtiendrez une erreur de délai d'attente, mais les clés semblent quand même réussir à copier. GitHub Redis numéro 1903

0
Zectbumo