Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Jak korzystać z redis' „ZRZUT” i „PRZYWRACANIE” (offline)?

Polecenia zrzutu/przywracania nie są tak naprawdę zaprojektowane do użycia z wiersza poleceń, ponieważ format serializacji jest binarny (jest taki sam, jak w przypadku zrzutów RDB). To sprawia, że ​​jest to niewygodne, ponieważ powłoka ma tendencję do interpretowania tych znaków (nawet gdy używany jest format „drukowalny”).

Oto format „do druku”:

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

Format "drukowalny" nie może być użyty jako dane wejściowe dla opcji -x, która tak naprawdę oczekuje rzeczywistych danych. To mylące zachowanie redis-cli.

Istnieje jednak prosty sposób na uzyskanie surowego formatu:

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

Teraz nie jest możliwe bezpośrednie potokowanie wyniku --raw dump podczas przywracania -x, ponieważ ostatni znak jest błędny. Porównaj wyniki zrzutu --raw i zrzutu do druku. Zauważysz, że opcja --raw dodaje dodatkowy \n na końcu. Opcja surowa nie jest w 100% surowa;-)

Ten dodatkowy znak musi zostać usunięty, zanim dane będą mogły zostać przetworzone przez opcję -x. Na koniec, prawidłowe polecenie (w systemie GNU/Linux) do przesyłania danych wyjściowych zrzutu podczas przywracania to:

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

To nie jest ładne. Spodziewam się, że większość ludzi do wykonywania takich zadań polegałaby raczej na skrypcie perl/python/ruby niż na powłoce.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Błąd kanałów Django - Nie można zaimportować BACKEND 'asgi_redis.RedisChannelLayer'

  2. Transakcje i obserwuj wyciąg w Redis

  3. redis Wygląda na to, że serwer zamknął połączenie

  4. Laravel 4 :Wywołanie niezdefiniowanej metody Redis::connection()

  5. Czy Redis utrwala dane?