redis持久化rdb和aof


redis如果不把数据做持久化,则是把数据存储在内存里面的,所以速度很快。而持久化的目的是为了保证数据安全。redis提供了两种持久化的方案:rdb和appendonly(简称aof)。

简单讲,rdb形式就是把具体的数据(key以及value)存到到一个文件中;而aof这种是把操作过程以日志的形式存到一个文件里,类似于mysql的bin-log。

rdb,需要定义dir,也就是数据所存放的目录,其实aof文件也会放到这个目录下面,而dbfilename则定义了rdb文件的名字。配置文件中有一个参数“save”来定义redis按照什么样的规则把内存中的数据刷新到磁盘上的rdb文件里。当然我们也可以用命令“save”或者“bgsave”来手动把内存里面的数据更新到磁盘上。如果想要关闭rdb持久化,可以直接把save参数的值设置为空,即save “”,或者在redis-cli命令行里面执行:config set save “”.

aof,有一个参数是控制它的开关。“appendonly yes” 只有这个是yes时,才会在dir目录中生成一个aof文件,文件名字默认是appendonly.aof,当然我们可以用appendfilename参数去修改它。

对于aof文件,如果我们不做特殊操作,它会无限制增长,以至于把磁盘撑爆。如果业务对redis数据没有那么高的要求的话,可以不用开启aof。另外有一个方法可以实现aof文件的优化,就是执行命令 BGREWRITEAOF,这样就会重写aof文件,最终将aof文件的体积减小。这个过程可能会耗费一定的资源,建议在凌晨执行。

最后,再来总结一下。rdb并不会实时把内存数据写到磁盘中,意外断电时会丢一部分数据的,但是aof就安全得多,它几乎是实时记录日志的,通过参数appendfsync控制,默认everysec是一秒记录一次。两种持久化的方式是可以并存的,当数据恢复时,以aof优先。