一文讲透Redis中的RDB持久化机制

众所周知,Redis中的数据是存储到内存中的,如果因为什么原因Redis服务down了,那么里面的数据就丢失了。那么持久化对Redis就至关重要了,那么本文先来讲述下Redis中的RDB持久化机制。

RDB持久化是把当前进程数据生成快照保存到硬盘的过程。触发RDB持久化过程分为手动触发和自动触发。

手动触发

手动执行save,或者bgsave,会触发RDB的持久化。

  • save:会阻塞Redis服务器。
  • bgsave:Redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束。阻塞只发生在fork阶段,一般时间很短。
  • 总结:显然,bgsave是对save阻塞问题的优化,因此Redis内部所有的设计RDB的操作都采用bgsave。

自动触发

当有以下四种情况时,会自动触发RDB的持久化。

  • 使用save相关配合,如save m n,表示m秒内存在n次修改时,自动触发bgsave。
  • 如果从节点执行全量复制操作,主节点自动执行basave生成RDB文件并发送给从节点。
  • 执行debug reload命令重新加载Redis时,也会自动触发bgsave操作。
  • 默认情况执行shutdown命令时,如果没有开启AOF持久化功能,则自动执行bgsave。

bgsave流程

在这里插入图片描述

如上图:

  • 执行bgsave命令时,Redis主进程会判断当前是否存在执行的子进程,如RDB或者AOF子进程,如存在,则bgsave命令则直接返回。
  • 子进程生成临时快照文件,然后原子性的进行替换旧的快照文件。
  • 子进程完成后,会发送信号给父进程,父进程更新相关信息。

重要分析命令

以下命令返回的latest_fork_usec选型,是最近一个fork操作的耗时,单位为微妙,可以分析Redis主进程被阻塞的时间。

info stats

以下命令,可以查看最后一次生成RDB的时间:对应info命令中的rdb_last_save_time选项。

lastsave

关于持久化的信息,也可使用如下命令来查看:

info persistence

RDB经过压缩后,远小于内存,压缩选项,默认开启(yes):

config get rdbcompression

如果RDB文件损坏,可以使用redis-check-dump工具监测,并获取到报告。

RDB的相关配置

dir:RDB和AOF等文件的目录。

dbfilename:RDB的文件名字。

RDB持久化的优缺点

优点:紧凑压缩的二进制文件,恢复的速度快与AOF。

缺点:是对文件的快照,比较重量,不会频繁操作,不适合实时的持久化,可能会丢失部分数据。

发布了95 篇原创文章 · 获赞 32 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/jiangxiulilinux/article/details/104889208