Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Wie verwende ich redis' `DUMP` und `RESTORE` (offline)?

Die Dump/Restore-Befehle sind nicht wirklich dafür ausgelegt, von der Kommandozeile aus verwendet zu werden, da das Serialisierungsformat binär ist (es ist dasselbe, das für RDB-Dumps verwendet wird). Das macht es unbequem, weil die Shell dazu neigt, diese Zeichen zu interpretieren (selbst wenn das "druckbare" Format verwendet wird).

Hier ist das "druckbare" 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 "druckbare" Format kann nicht als Eingabe für die Option -x verwendet werden, die wirklich die eigentlichen Daten erwartet. Dies ist ein irreführendes Verhalten von redis-cli.

Es gibt jedoch eine einfache Möglichkeit, das Rohformat 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                                             |..|

Jetzt ist es nicht möglich, das Ergebnis eines --raw-Dumps direkt in eine -x-Wiederherstellung zu leiten, da das letzte Zeichen falsch ist. 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 Raw-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 eines Dumps in eine Wiederherstellung zu leiten:

$ 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 sich die meisten Leute eher auf ein Perl/Python/Ruby-Skript als auf die Shell verlassen würden, um solche Aufgaben zu erledigen.