版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010871004/article/details/88562535
RDB
RDB持久化就是把当前的数据以二进制的形式储存到本地硬盘的过程。以下命令设置储存的文件目录和文件名称
dbfilename redisData
dir /opt/redis/data/
通常分为手动触发和自动触发
手动触发
手动触发通常使用save和bgsave命令
- save:save命令会阻塞当前的服务器,知道RDB过程完成为止,对于内存比较大的实例会造成长时间阻塞,建议线上环境不要使用该命令。
- bgsave:Redis进程执行fork操作创建子进程,RDB持久化的过程由子进程完成,完成后自动结束。这种方式阻塞只发生在fork阶段,时间很短。
自动触发
- 使用
save m n
,表示m秒内数据集存在n次修改时,自动触发bgsave - 执行
debug reload
命令重新加载Redis时,也会自动触发save
操作 - 默认情况下执行
shutdown
命令时,如果没有开启AOF持久化功能的话则自动执行bgsave
。
BGSAVE运行流程
- 执行bgsave命令,如果当前又子进程在运行则直接返回。
- 主进程fork出子进程,fork期间可能出现阻塞,通过
info stats
查看lastest_fork_usec
选项,可以获取最近一个fork操作耗时,单位为微秒。 - 父进程fork完成后,bgsave命令返回,父进程继续响应其他命令。
- 子进程创建RDB文件,根据父进程内存生成临时快照文件,完成后对原有文件进行原子替换。
- 进程发送信号给父进程表示完成。
RDB优缺点
优点
- RDB是一个紧凑压缩的二进制文件,代表Redis在某一时间点上的数据快照。Redis默认采用LZF算法对生成的RDB文件做压缩处理,压缩后文件的大小远远小于内存的大小。可以通过
config set rdbcompression {yes|no}
动态修改。 - Redis加载RDB恢复数据远远快于AOF的方式。
缺点
- RDB方式数据没办法做到实时持久化/秒级持久化,因为bgsave每次运行都要执行fork操作创建子进程,属于重量级操作。
- RDB采用特定二进制保存,在Redis多个版本中,可能出现不兼容的情况。