sql >> Base de Datos >  >> NoSQL >> Redis

¿Cómo usar `DUMP` y `RESTORE` de redis (sin conexión)?

Los comandos de volcado/restauración no están realmente diseñados para usarse desde la línea de comandos, porque el formato de serialización es binario (es el mismo que se usa para los volcados de RDB). Lo hace inconveniente porque el shell tiende a interpretar esos caracteres (incluso cuando se usa el formato "imprimible").

Aquí está el formato "imprimible":

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

El formato "imprimible" no se puede usar como entrada para la opción -x que realmente espera los datos reales. Este es un comportamiento engañoso de redis-cli.

Sin embargo, hay una manera fácil de obtener el formato sin formato:

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

Ahora, no es posible canalizar directamente el resultado de un volcado --raw en una restauración -x, porque el último carácter es incorrecto. Compare la salida del volcado --raw e imprimible. Notará que la opción --raw agrega un \n adicional al final. La opción raw no es 100% raw;-)

Este carácter adicional debe eliminarse antes de que la opción -x pueda procesar los datos. Finalmente, el comando correcto (en un sistema GNU/Linux) para canalizar la salida de un volcado en una restauración es:

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

Esto no es bonito. Espero que la mayoría de la gente confíe en un script perl/python/ruby en lugar del shell para realizar tales tareas.