Les commandes dump/restore ne sont pas vraiment conçues pour être utilisées depuis la ligne de commande, car le format de sérialisation est binaire (c'est le même que celui utilisé pour les dumps RDB). Cela le rend peu pratique car le shell a tendance à interpréter ces caractères (même lorsque le format "imprimable" est utilisé).
Voici le format "imprimable" :
$ redis-cli lpush test 1 2 3 4 5
(integer) 5
$ redis-cli dump test
"\n\x15\x15\x00\x00\x00\x12\x00\x00\x00\x05\x00\x00\xf6\x02\xf5\x02\xf4\x02\xf3\x02\xf2\xff\x06\x00\x1c\x8a\xda\x0e}\xcb\xe1."
Le format "imprimable" ne peut pas être utilisé comme entrée pour l'option -x qui attend vraiment les données réelles. Il s'agit d'un comportement trompeur de redis-cli.
Cependant, il existe un moyen simple d'obtenir le format brut :
$ redis-cli --raw dump test | hexdump -C
00000000 0a 15 15 00 00 00 12 00 00 00 05 00 00 f6 02 f5 |................|
00000010 02 f4 02 f3 02 f2 ff 06 00 1c 8a da 0e 7d cb e1 |.............}..|
00000020 2e 0a |..|
Désormais, il n'est plus possible de rediriger directement le résultat d'un --raw dump dans une restauration -x, car le dernier caractère est erroné. Comparez la sortie du vidage --raw et printable. Vous remarquerez que l'option --raw ajoute un \n supplémentaire à la fin. L'option raw n'est pas 100% raw;-)
Ce caractère supplémentaire doit être supprimé avant que les données puissent être traitées par l'option -x. Enfin, la commande correcte (sur un système GNU/Linux) pour canaliser la sortie d'un vidage dans une restauration est :
$ redis-cli --raw dump test | head -c-1 | redis-cli -x restore test1 0
OK
Ce n'est pas joli. Je suppose que la plupart des gens s'appuieraient sur un script perl/python/ruby plutôt que sur le shell pour effectuer de telles tâches.