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?
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.
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:
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
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.
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;
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