Redis作为内存数据库,当断电或redis宕机状况下,会造成内存中数据丢失。因此Redis也有自己持久化机制,即RDB、AOF方式对Redis数据做持久化。
1、RDB
RDB为Redis默认持久化机制,是将内存中数据集快速写入到磁盘,记录内存快照。当发生宕机重启Redis,数据会从文件中重新读到内存中。
# save ""
save 900 1 如果900秒有超过1个key发生变化,则往磁盘写入
save 300 10 如果300秒有超过10个key发生变化,则往磁盘写入
save 60 10000 如果60秒有超过10000key发生变化,则往磁盘写入
RDB方式默认情况下是开启的,如果要关闭可以打开save "" 注释
2、AOF
AOF方式通过将Redis写操作日志保存起来,Redis宕机重启时,将日志文件中的命令按顺序执行一遍,达到数据恢复目的。默认情况下它是关闭的,需要我们去配置。
appendonly no //默认是关闭的,开启需要设置yes
appendfilename "appendonly.aof" //生成aof文件名
#appendfsync allawysec //每接受一次redis写命令,往磁盘中写一次,操作频繁
appendfsync everysec //1秒写一次
#appendfsync no //完全依赖os,数据一致性没保障
no-appendfsync-on-rewirte no
auto-aof-rewirte-percentage 100 //aof重写机制,当aof文件容量达到64m时,开始重写aof文件
auto-aof-rewirte-size 64m
AOF方式通过追加写日志方式做的持久化,这造成aof文件会越变越大,所以AOF也有自己的一套重写机制,父进程来完成Redis客户端写操作并且将写操作缓存起来,而子进程则对Redis内存进行写入临时文件,然后父进程调用子进程将两者写操作记录到临时文件,即使子进程失败,也能达到记录写操作目的,最后父进程再去替换aof文件,这样就达到aof文件压缩目的。
3、RDB与AOF比较
1、RDB方式持久化速度大于AOF方式,AOF记录每一步写操作,对性能影响比较大;
2、RDB方式数据一致性差;
3、AOF文件随着写日志记录,越来越庞大,一旦Redis宕机重启时间消耗比较长。选用RDB重启时间比较短;
4、一般而言,做Redis持久化,RDB和AOF是同时开启的,互补两者之间的不足。