gpt4 book ai didi

redis - 如何使用redis的 `DUMP`和 `RESTORE`(离线)?

转载 作者:IT王子 更新时间:2023-10-29 05:55:17 31 4
gpt4 key购买 nike

我试过redis的DUMP命令,重定向到文件(或管道),但是 RESTORE报告此错误:

$ redis-cli dump test > /tmp/test.dump
$ cat /tmp/test.dump | redis-cli -x restore test1 0
(error) ERR DUMP payload version or checksum are wrong
$ redis-cli dump test | redis-cli -x restore test1 0
(error) ERR DUMP payload version or checksum are wrong

我知道 MIGRATE可以在线进行,但是MIGRATE也从原始服务器中删除该 key ,我不希望我的 redis 暴露在公共(public)互联网上。

有一些第三方选项,redis-rdb-tools例如,但毕竟,DUMPRESTORE 究竟是如何工作的?

最佳答案

转储/恢复命令并非真正设计用于从命令行使用,因为序列化格式是二进制的(与用于 RDB 转储的格式相同)。这很不方便,因为 shell 倾向于解释这些字符(即使使用“可打印”格式)。

这是“可打印”格式:

$ 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 转储的结果通过管道传递到 -x 恢复中,因为最后一个字符是错误的。比较 --raw 和可打印转储的输出。您会注意到 --raw 选项在末尾添加了一个额外的\n 。 raw 选项不是 100% raw ;-)

在数据可以被 -x 选项处理之前,需要删除这个额外的字符。最后,在还原中通过管道传输转储输出的正确命令(在 GNU/Linux 系统上)是:

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

这不是很漂亮。我预计大多数人会依赖 perl/python/ruby 脚本而不是 shell 来完成此类任务。

关于redis - 如何使用redis的 `DUMP`和 `RESTORE`(离线)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16127682/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com