sql >> Database >  >> NoSQL >> Redis

Hoe gebruik ik redis' `DUMP` en `RESTORE` (offline)?

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.




  1. Moet ik de Redis-verbinding tussen bestanden/modules delen?

  2. Het stapelvenster toont geen uitvoer bij het debuggen van Redis Lua-scripts met ZeroBrane

  3. Aan de slag met CouchDB

  4. Handmatig argumenten leveren aan een MongoDB-query om de sorteerfunctie te ondersteunen (voor hoofdletterongevoelige index)