AOF 与 RDB

这两个是Redis的备份方式。一个是快照(RDB),一个是记录所有的命令到文件(AOF,类似MySQL的binlog)

RDB的备份与恢复

查看备份存放的目录: CONFIG GET dir

查看备份的文件名:CONFIG GET dbfilename,默认为rdb.dump

备份

然后执行save命令,就可以看到在备份存放的目录下,生成了${dbfilename}的文件了,这个就是执行save命令一瞬间的快照.

恢复

原理:redis启动的时候,在dir目录下,查找${dbfilename}的文件,然后重新加载它(注意,它会删除原来的数据,然后以这个文件的数据加载)

AOF的备份与恢复

查看备份存放的目录: CONFIG GET dir

查看是否开启AOF:CONFIG GET appendonly,如果没有,就设置为开启CONFIG SET appendonly yes

查看AOF的文件:CONFIG GET appendfilename,默认为appendonly.aof,设置自定义名字CONFIG SET appendfilename myaof.aof

备份

执行 BGREWRITEAOF 命令,强制重写AOF,即可.

恢复

原理:redis启动的时候,在dir目录下,查找${appendfilename}的文件,然后重新执行文件里的命令来恢复数据(注意,它会删除原来的数据,然后以这个文件的数据加载).

RDB与AOF 同时启用时

如果同时启用,则Redis以AOF为准.

合并两个不同实例的数据

利用AOF备份(本质上它只是一系列Redis的命令文本)。假设有两台Redis(6379, 6479),它们的AOF文件名分别为(6379.aof, 6479.aof),现在要将6379的数据,合并到6479.aof:

首先在6379服务器上,开启AOF,并保存,假设文件名为6379.aof 然后在6479服务器上,开启AOF,并保存,假设文件名为6479.aof

注意 :最好做下备份: cp 6379.aof 6379.aof.bak, cp 6479.aof 6479.aof.bak

然后将6379.aof的文件内容合并到6479.aof:cat 6379.aof 6479.aof > new.aof && mv new.aof 6479.aof。(这里,可以选择如果key冲突,那么以哪个redis的为准,即决定好cat后面的参数的顺序即可~) 最后启下6479的服务器即可.