RDB/AOF区别
- RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。
- AOF持久化以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。
一个是持续的用日志记录写操作,crash后利用日志恢复;一个是平时写操作的时候不触发写,只有手动提交save命令,或者是关闭命令时,才触发备份操作。
二者选择的标准,就是看系统是愿意牺牲一些性能,换取更高的缓存一致性(aof),还是愿意写操作频繁的时候,不启用备份来换取更高的性能,待手动运行save的时候,再做备份(rdb)
RDB 的优缺点
优点:
- 适合大规模的数据恢复。
- 如果业务对数据完整性和一致性要求不高,RDB是很好的选择。
缺点:
- 数据的完整性和一致性不高,因为RDB可能在最后一次备份时宕机了。
- 备份时占用内存,因为Redis 在备份时会独立创建一个子进程,将数据写入到一个临时文件(此时内存中的数据是原来的两倍哦),最后再将临时文件替换之前的备份文件。 Redis 的持久化和数据的恢复要选择在夜深人静的时候执行是比较合理的。
RDB持久化配置
Redis会将数据集的快照dump到dump.rdb文件中。默认配置文件
redis.conf
- save 900 1 在900秒(15分钟)之后,如果至少有1个key发生变化,则dump内存快照。
- save 300 10 在300秒(5分钟)之后,如果至少有10个key发生变化,则dump内存快照。
- save 60 10000 在60秒(1分钟)之后,如果至少有10000个key发生变化,则dump内存快照。
AOF 的优缺点
优点:
- 数据的完整性和一致性更高
缺点:
- 因为AOF记录的内容多,文件会越来越大,数据恢复也会越来越慢。
AOF持久化配置
默认配置文件
redis.conf
- appendfsync always 每次有数据修改发生时都会写入AOF文件。
- appendfsync everysec 每秒钟同步一次,该策略为AOF的缺省策略。
- appendfsync no 从不同步。高效但是数据不会被持久化。
AOF的重写机制
AOF重写就是把过期的、没用的、重复的以及可优化的命令,进行化简。只取最终有价值的结果。虽然写入操作很频繁,但系统定义的key的量是相对有限的。 AOF重写可以大大压缩最终日志文件的大小。从而减少磁盘占用量,加快数据恢复速度。比如我们有个计数的服务,有很多自增的操作,比如有一个key自增到1个亿,对AOF文件来说就是一亿次incr。AOF重写就只用记1条记录。
默认配置文件
redis.conf
auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb