Die dump/restore-Befehle sind nicht wirklich für die Verwendung über die Befehlszeile vorgesehen, da das Serialisierungsformat binär ist (es ist dasselbe, das für RDB-Dumps verwendet wird). Dies macht es unpraktisch, da die Shell dazu neigt, diese Zeichen zu interpretieren (selbst wenn das "druckbare" Format verwendet wird). Hier
ist das „druckbaren“ Format:
$ 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."
Das „druckbaren“ Format nicht als Eingabe für die Option -x verwendet werden kann, die wirklich die eigentlichen Daten erwartet. Dies ist ein irreführendes Verhalten von redis-cli.
Allerdings gibt eine einfache Möglichkeit, das RAW-Format zu erhalten:
$ 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 |..|
Nun ist es nicht möglich, direkt Rohr das Ergebnis einer --raw Dump in einer -x wiederherstellen, weil der letzte Charakter ist falsch. Vergleichen Sie die Ausgabe des --raw und des druckbaren Dumps. Sie werden feststellen, dass die Option --raw am Ende ein zusätzliches \ n hinzufügt. Die rohe Option ist nicht 100% roh ;-)
Dieses zusätzliche Zeichen muss entfernt werden, bevor die Daten mit der Option -x verarbeitet werden können. Schließlich ist der richtige Befehl (auf einem GNU/Linux-System), um die Ausgabe des Dump in einer Wiederherstellung:
$ redis-cli --raw dump test | head -c-1 | redis-cli -x restore test1 0
OK
Das ist nicht schön. Ich gehe davon aus, dass die meisten Leute sich eher auf ein Perl/Python/Ruby-Skript als auf die Shell verlassen würden, um solche Aufgaben zu erledigen.
dieser Befehl Kopf funktioniert nur auf Linux, nicht Mac – slf
Danke. Wie Sie gesagt haben, sind diese beiden Befehle nicht dazu gedacht, in der Befehlszeile verwendet zu werden, aber dies ist wahrscheinlich der beste Weg, dies zu tun. –
Wenn Sie auf einem Mac sind, können Sie 'brew install coreutils' installieren, was gnu head für Sie mit dem Namen ghead installiert. Auf diese Weise können Sie den obigen Befehl ausführen Kopf mit Ghead –