在redis中转储和恢复特定键的数据

14

我想备份Redis中特定的一个键,而Redis中有许多键,我不想备份整个Redis数据库。我查看了http://redis.io/commands,发现有一个dump命令可以用来备份一个特定的键,命令如下:

 redis> dump "myKey"

但是在Redis控制台中,输出的格式仅限于十六进制。是否有可能将特定键的数据存储到文件中,然后稍后将其导入到该键中?


这可能有点离题,因为您要求备份和恢复(以及可能将备份文件保存在某个地方),但这也可能是一个不错的提示:redis MIGRATE命令负责在两台机器之间进行转储和恢复,虽然它是一个目前受限制的命令。对于redis < 3,键将从源实例中删除(这可能是一个小问题,因为您可以在迁移之前轻松备份源数据库,然后在迁移后再次使用它),我无法找到一些支持目标数据库身份验证的选项。 - reallynice
我会采用Sergio Tulentsev的方法。编写自己的代码来转储和恢复键。这只需要几行代码。 - Sahib Khan
4个回答

35

如果您正尝试从命令行转储/恢复密钥(这是我发现这个问题时需要做的),Redis具有一些不明显的怪癖。请参阅此答案以获取更详细的说明。

简短的答案是按以下方式进行转储/恢复:

bwood@mybox:~$ redis-cli --raw dump mykey | head -c-1 > myfile
bwood@mybox:~$ cat myfile | redis-cli -x restore mynewkey 0

2
如果有人对批处理脚本感兴趣,可以使用以下脚本获取所有键并将它们保存到文件中:#!/bin/bash for each in $( redis-cli KEYS \apikey* ); do redis-cli --raw dump mykey | head -c-1 > dump/$each done 这些文件可以在之后使用Brendan Wood的脚本进行导入。 - Timothy Dalton
这是一篇很好的文章,详细内容请参见:https://medium.com/@elliotchance/migrating-data-between-redis-servers-without-downtime-429e4c8048e6 - J. Allen

6

接着这篇文章:

bwood@mybox:~$ redis-cli --raw dump mykey | head -c-1 > myfile
bwood@mybox:~$ cat myfile | redis-cli -x restore mynewkey 0

如果这个方法对你不起作用,而且你遇到了类似这样的错误:head: illegal byte count -- -1
那么请修改dump命令,去掉head命令:
redis-cli --raw dump mykey > myfile 现在,在Mac上使用sublime或在PC上使用textpad打开转储文件,删除最后两个字符并保存,然后进行还原。
这是我的最后两行:
 0561 7074 7572 6520 fa00 5be0 0526 015d
 7d06 00a7 afed c100 323d 400a 

我删除了“0a”,并保存,然后恢复正常了,例如。

0561 7074 7572 6520 fa00 5be0 0526 015d
7d06 00a7 afed c100 323d 40

4
如果使用OSX的用户遇到错误“head: illegal byte count -- -1”,则可以通过安装coreutils(brew install coreutils)并使用“ghead -c-1”来解决问题。 - alexmoon
我的要求是将使用SET命令设置的密钥转储并恢复到一个新的集群,这个过程完美地实现了。 - undefined

2
编写一个脚本,可以DUMP所需的键,将输出保存到文件中,然后稍后您可以读取这些文件并将其内容推送到RESTORE命令。

我会选择这种方法。 - Sahib Khan

0

关于这篇文章的另一个跟进:

有可能你的文件末尾只是一个可见的换行符。所以,如果你用自己喜欢的文本编辑器打开它,只需删除最后一个换行符即可。

这对我很有帮助。

之前的用户建议例如删除最后两个字符,但对我来说并没有起作用,因为数据以不同的方式表示。


目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接