深入了解Redis【十一】RDB与AOF持久化
引言
Redis的持久化分为两种:RDB(redis database)与AOF(Append Only File)。
- RDB
在指定的时间间隔内将内存中的数据集快照写入磁盘,或者手动执行SAVE\BGSAVE进行持久化操作。 - AOF
保存Redis服务器所执行的写命令来记录数据库状态。
1、RDB
- 优点
节省磁盘空间,恢复速度快 - 缺点
虽然Redis在fork时使用了写时拷贝技术,但是如果数据庞大时还是比较消耗性能。
备份周期在一定间隔时间做一次备份,所以如果Redis意外down掉的话,就会丢失最后一次快照后的所有修改。
2、AOF
- 优点
备份机制更稳健,丢失数据概率更低。
可读的日志文本,通过操作AOF文件,可以处理误操作。 - 缺点
比起RDB占用更多的磁盘空间。
恢复备份速度要慢。
每次读写都同步的话,有一定的性能压力。
3、注意
- RDB、AOF文件同时存在时,服务器会根据AOF文件恢复,因为对于服务器来说,AOF的备份数据更完整。(考虑了意外宕机的情况)。
- AOF日志sync属性的配置,如果不要求性能,在每条写指令时都sync一下磁盘,就不会丢失数据。
但是在高性能的要求下每次都sync是不现实的,一般都使用定时sync,比如1s1次,这个时候最多就会丢失1s的数据
4、选取
建议两个都开启,如果对数据不敏感可以单独用RDB,如果只用来做缓存,可以都不开启。
5、RDB的save和bgsave区别
- 两个都是手动持久化的方式。
- save会占用主线程,此时只管保存,其他操作全部阻塞。
- bgsave是开通一个fork子线程,redis通过创建子进程来进行RDB操作。
cow指的是copy on write,子进程创建后,父子进程共享数据段,父进程继续提供读写服务,写脏的页面数据会逐渐和子进程分离开来。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ClawHub的技术分享!