Perintah dump/restore tidak benar-benar dirancang untuk digunakan dari baris perintah, karena format serialisasi adalah biner (sama dengan yang digunakan untuk dump RDB). Itu membuatnya tidak nyaman karena shell cenderung menafsirkan karakter tersebut (bahkan ketika format "dapat dicetak" digunakan).
Berikut adalah format "yang dapat dicetak":
$ 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."
Format "dapat dicetak" tidak dapat digunakan sebagai input untuk opsi -x yang benar-benar mengharapkan data aktual. Ini adalah perilaku redis-cli yang menyesatkan.
Namun, ada cara mudah untuk mendapatkan format mentah:
$ 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 |..|
Sekarang, tidak mungkin untuk langsung menyalurkan hasil --raw dump di -x restore, karena karakter terakhir salah. Bandingkan output dari --raw dan dump yang dapat dicetak. Anda akan melihat opsi --raw menambahkan \n tambahan di akhir. Opsi mentah tidak 100% mentah;-)
Karakter tambahan ini perlu dihilangkan sebelum data dapat diproses oleh opsi -x. Terakhir, perintah yang benar (pada sistem GNU/Linux) untuk menyalurkan output dump dalam pemulihan adalah:
$ redis-cli --raw dump test | head -c-1 | redis-cli -x restore test1 0
OK
Ini tidak cantik. Saya berharap kebanyakan orang akan mengandalkan skrip perl/python/ruby daripada shell untuk melakukan tugas seperti itu.