Redis 持久化 --RDB
RDB:
Redis DataBase(RDB) 是 redis的 持久化方式,称为内存快照。形如照相一般,将内存中的数据在某一时刻进行状态记录,并以文件的方式保存到磁盘中,因此在数据恢复时可以快速恢复。
未来 保证数据的可靠性, RDB执行的是全量快照,也就说是每次都保存这一时刻的所有数据。但是这个过程的消费是很大的。redis提供两个命令来生成 RDB文件:
save:在主线程中执行,阻塞线程。
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的方式是非常不错的一个选择。
版权声明: 本文为 InfoQ 作者【是老郭啊】的原创文章。
原文链接:【http://xie.infoq.cn/article/b7267625bfd3ab8a2e18aac61】。文章转载请联系作者。
评论