De dump/restore-opdrachten zijn niet echt ontworpen om vanaf de opdrachtregel te worden gebruikt, omdat het serialisatieformaat binair is (het is hetzelfde formaat dat wordt gebruikt voor RDB-dumps). Het maakt het onhandig omdat de shell de neiging heeft om die karakters te interpreteren (zelfs wanneer het "afdrukbare" formaat wordt gebruikt).
Hier is het "afdrukbare" formaat:
$ 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."
Het "afdrukbare" formaat kan niet worden gebruikt als invoer voor de -x optie die echt de werkelijke gegevens verwacht. Dit is een misleidend gedrag van redis-cli.
Er is echter een gemakkelijke manier om het onbewerkte formaat te krijgen:
$ 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 |..|
Nu is het niet mogelijk om het resultaat van een --raw dump direct in een -x restore te pipen, omdat het laatste teken verkeerd is. Vergelijk de uitvoer van de --raw en afdrukbare dump. Je zult merken dat de --raw optie een extra \n toevoegt aan het einde. De onbewerkte optie is niet 100% onbewerkt;-)
Dit extra teken moet worden verwijderd voordat de gegevens kunnen worden verwerkt door de -x optie. Ten slotte is het juiste commando (op een GNU/Linux-systeem) om de uitvoer van een dump in een herstel te pipen:
$ redis-cli --raw dump test | head -c-1 | redis-cli -x restore test1 0
OK
Dit is niet mooi. Ik verwacht dat de meeste mensen zullen vertrouwen op een perl/python/ruby-script in plaats van op de shell om dergelijke taken uit te voeren.