RDB和AOF都可以Redis的持久化,
两者有一定的区别:
Redis默认是开启RDB的,AOF默认关闭,需要手动开启;
RDB和AOF同时开启的情况下,会只加载AOF,
两者都有相应的check命令,来进行检测修复--fix,
RDB
由系统fork出一个进程来执行
默认是根据自定义的时间间隔内发生的变化,来触发是否需要生成快照文件进行保存,
当然也可以使用命令来强制立刻保存,如:save...等命令
相关参数配置:
save 900 1
save 300 10
save 60 10000
优点:
1)恢复速度快,容易备份;
缺点:
1)由于是根据间隔生成快照,出现故障时会丢失间隔内数据;
2)如果数据过大,每次系统fork进程进行快照生成,相当消耗性能,有可能会导致终止客户端请求。
AOF
将Redis操作指令追加到以.aof结尾的文件中,默认是每秒(everysec)记录一次,
当aof文件超过大小时,系统会fork一个进程来对aof文件进行重写操作,即:auto-aof-rewrite。
相关参数配置:
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
优点:
1)记录内容完整,在数据恢复时丢失数据会比RDB少;
缺点:
1)操作记录较多,文件内容很大;
2)恢复速度比RDB慢;
3)由于记录频繁,相当耗性能;
最后,一般情况下推荐做主从同步时候,在slave端只做RDB快照生成,并且定时对RDB快照文件进行备份。