Redis 持久化 --RDB

用户头像
是老郭啊
关注
发布于: 2020 年 09 月 04 日

RDB:

Redis DataBase(RDB) 是 redis的 持久化方式,称为内存快照。形如照相一般,将内存中的数据在某一时刻进行状态记录,并以文件的方式保存到磁盘中,因此在数据恢复时可以快速恢复。

未来 保证数据的可靠性, RDB执行的是全量快照,也就说是每次都保存这一时刻的所有数据。但是这个过程的消费是很大的。redis提供两个命令来生成 RDB文件:

  1. save:在主线程中执行,阻塞线程。

  2. bgsave:创建一个子进程,专业用户写入 RDB文件,这个方式是 redis RDB的默认配置

简单介绍一下 bgsave的执行过程,他在做 RDB的时刻 fork一个子进程,可以共享主线程的所有内存数据,但是如果数据量很大的话,在 fork一瞬间也会造成主线程堵塞。RDB借助操作系统提供的 写实复制技术(Copy-On-Write) ,一开始拷贝一份主线程所有内存数据,然后进行持久化,在持久化过程中,若数据 A在主线程中造成修改,这块数据就会复制一份,生成该数据的副本,这样一来避免了阻塞主线程,也保证了持久化的一致性。

每次的 RDB持久化,中间的间隔时间是非常重要的,为了保证尽可能减少宕机的数据丢失,也保证不频繁 fork子进程造成对资源的浪费和阻塞, RDB采用记录的形式,当完成第一次全量快照后,两次快照中间修改的数据将被记录下来,下次快照时,只修改这部分的数据,但是若数据量巨大,也会造成巨大的开销。因此, Redis 4.0提出混合 AOF和 RDB的持久化方法。

混合 AOF和 RDB的方式就是内存快照以一定频率执行,在两次快照之间,使用 AOF日志记录这期间的所有操作命令,然后下次快照直接修改被操作过的命令。

若需要尽最大可能保证宕机后的数据恢复量,混合 AOD 和 RDB的方式是非常不错的一个选择。

发布于: 2020 年 09 月 04 日 阅读数: 24
用户头像

是老郭啊

关注

一位头发日渐稀疏的 90后 IT男 2020.04.07 加入

当你焦虑大于努力时,你将沦为焦虑本身。

评论

发布
暂无评论
Redis 持久化 --RDB