Redis 的持久化底层如何实现的和优点缺点

RDB(Redis DataBase:在不同的时间点将 redis 的数据生成的快照同步到磁盘等介质上):内存
到硬盘的快照,定期更新。

缺点:耗时,耗性能(fork+io 操作),易丢失数据。

AOF(Append Only File:将 redis 所执行过的所有指令都记录下来,在下次 redis 重启时,只需要执行指令就可以了):写日志。

缺点:体积大,恢复速度慢。bgsave 做镜像全量持久化, aof 做增量持久化。因为 bgsave 会消耗比较长的时间,不够实时,在停机的时候会导致大量的数据丢失,需要 aof 来配合,在 redis 实例重启时,优先使用 aof 来恢复内存的状态,如果没有 aof 日志,就会使用 rdb 文件来恢复。 Redis 会定期做aof 重写,压缩 aof 文件日志大小。

Redis4.0 之后有了混合持久化的功能,将 bgsave 的全量和 aof 的增量做了融合处理,这样既保证了恢复的效率又兼顾了数据的安全性。 bgsave 的原理, fork 和 cow, fork 是指 redis 通过创建子进程来进行 bgsave 操作, cow 指的是 copy on write,子进程创建后,父子进程共享数据段,父进程继续提供读写服务,写脏的页面数据会逐渐和子进程分离开来。


分享到:


相關文章: