Redis
 sql >> база данни >  >> NoSQL >> Redis

Как да използвам `DUMP` и `RESTORE` на redis (офлайн)?

Командите dump/restore всъщност не са проектирани да се използват от командния ред, тъй като форматът на сериализация е двоичен (той е същият, използван за изхвърляния на RDB). Това го прави неудобно, защото обвивката има склонност да интерпретира тези знаци (дори когато се използва форматът за печат).

Ето и форматът за печат:

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

Форматът за печат не може да се използва като вход за опцията -x, която наистина очаква действителните данни. Това е подвеждащо поведение на redis-cli.

Въпреки това, има лесен начин да получите суров формат:

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

Сега не е възможно директно да се предаде резултатът от --raw dump при възстановяване на -x, защото последният символ е грешен. Сравнете изхода на --raw и printable dump. Ще забележите, че опцията --raw добавя допълнително \n в края. Суровият вариант не е 100% необработен;-)

Този допълнителен знак трябва да бъде премахнат, преди данните да могат да бъдат обработени от опцията -x. И накрая, правилната команда (в GNU/Linux система) за извеждане на изхода на дъмп при възстановяване е:

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

Това не е красиво. Очаквам повечето хора да разчитат на perl/python/ruby скрипт, а не на shell, за да изпълняват подобни задачи.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. redis-cli пренасочен към 127.0.0.1

  2. Как да кажа на клиент къде новият Redis master използва Sentinel

  3. Как да конфигурирам клиента на Node Redis да хвърля незабавно грешки, когато връзката е неуспешна? [ЧЕТЕТЕ ПОДРОБНОСТИ]

  4. Как да запишете само една база данни в Redis?

  5. Най-добрата библиотека Redis за Java