sql >> Databáze >  >> NoSQL >> Redis

Jak používat redis' `DUMP` a `RESTORE` (offline)?

Příkazy dump/restore nejsou ve skutečnosti navrženy pro použití z příkazového řádku, protože formát serializace je binární (je stejný jako u výpisů RDB). Je to nepohodlné, protože shell má tendenci tyto znaky interpretovat (i když je použit "tisknutelný" formát).

Zde je "tisknutelný" formát:

$ 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."

Formát "tisknutelný" nelze použít jako vstup pro volbu -x, která skutečně očekává skutečná data. Toto je zavádějící chování redis-cli.

Existuje však snadný způsob, jak získat formát raw:

$ 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                                             |..|

Nyní není možné přímo přenést výsledek --raw dump při obnově -x, protože poslední znak je chybný. Porovnejte výstup --raw a tisknutelný výpis. Všimnete si, že volba --raw přidává na konec \n navíc. Možnost raw není 100% raw;-)

Tento znak navíc je třeba odstranit, než budou data zpracována volbou -x. Konečně správný příkaz (v systému GNU/Linux) pro rouru výstupu výpisu při obnově je:

$ redis-cli --raw dump test | head -c-1 | redis-cli -x restore test1 0
OK

To není hezké. Očekávám, že většina lidí by při provádění takových úkolů spoléhala spíše na skript perl/python/ruby než na shell.




  1. Mongoose vnořené dokumenty vs vnořené schéma

  2. Připojte se k AWS ElastiCache pomocí In-Transit Encryption

  3. Mongoose Pokus o otevření neuzavřeného připojení

  4. Dotaz MongoDB pro vrácení pouze vloženého dokumentu