Redis合并两实例的数据
Contents
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的服务器即可.