Appearance
3种方式
- RDB
- 内存数据的全量二进制快照。
- 优点:文件紧凑文件体积小,非常适合备份和灾难恢复而且恢复速度快
- 缺点:通常每几分钟执行一次,可能会丢失最后一次快照之后的数据。
- 内存数据的全量二进制快照。
- AOF
- 记录的是操作指令的日志。
- 优点:数据安全性高,配置的每秒刷盘最多丢1s的数据
- 缺点:文件体积大,重启恢复慢。
- 基本流程:客户端每来一个写命令,redis会先执行命令修改内存,然后把命令追加到aof_buf缓冲区,最后根据刷盘策略刷新到磁盘,默认是每秒一次,平衡性能和安全。
- 重写:AOF文件大的话会触发重写机制
- fork一个子进程,然后基于当前的内存数据生成一个新的紧凑的AOF文件,期间主进程继续服务,新命令会写到重写缓冲区,当子进程写完新的AOF,会通知父进程,父进程把新命令追加到新AOF底部,然后原子替换AOF文件,完成
- 写时复制:redis在fork时进行的优化机制,父子进程共享物理内存页,只有发生写操作的时候才复制对应页,从而避免复制全部内存数据,实现高效快照。
- 记录的是操作指令的日志。
- 混合持久化
- AOF重写的时候前半段用RDB,后半段用AOF日记,兼顾速度与完整。