Polecenia zrzutu/przywracania nie są tak naprawdę zaprojektowane do użycia z wiersza poleceń, ponieważ format serializacji jest binarny (jest taki sam, jak w przypadku zrzutów RDB). To sprawia, że jest to niewygodne, ponieważ powłoka ma tendencję do interpretowania tych znaków (nawet gdy używany jest format „drukowalny”).
Oto format „do druku”:
$ 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 "drukowalny" nie może być użyty jako dane wejściowe dla opcji -x, która tak naprawdę oczekuje rzeczywistych danych. To mylące zachowanie redis-cli.
Istnieje jednak prosty sposób na uzyskanie surowego formatu:
$ 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 |..|
Teraz nie jest możliwe bezpośrednie potokowanie wyniku --raw dump podczas przywracania -x, ponieważ ostatni znak jest błędny. Porównaj wyniki zrzutu --raw i zrzutu do druku. Zauważysz, że opcja --raw dodaje dodatkowy \n na końcu. Opcja surowa nie jest w 100% surowa;-)
Ten dodatkowy znak musi zostać usunięty, zanim dane będą mogły zostać przetworzone przez opcję -x. Na koniec, prawidłowe polecenie (w systemie GNU/Linux) do przesyłania danych wyjściowych zrzutu podczas przywracania to:
$ redis-cli --raw dump test | head -c-1 | redis-cli -x restore test1 0
OK
To nie jest ładne. Spodziewam się, że większość ludzi do wykonywania takich zadań polegałaby raczej na skrypcie perl/python/ruby niż na powłoce.