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
。
【redis持久化——RDB】
文章图片
- 执行bgsave命令,如果当前又子进程在运行则直接返回。
- 主进程fork出子进程,fork期间可能出现阻塞,通过
info stats
查看lastest_fork_usec
选项,可以获取最近一个fork操作耗时,单位为微秒。 - 父进程fork完成后,bgsave命令返回,父进程继续响应其他命令。
- 子进程创建RDB文件,根据父进程内存生成临时快照文件,完成后对原有文件进行原子替换。
- 进程发送信号给父进程表示完成。
优点
- RDB是一个紧凑压缩的二进制文件,代表Redis在某一时间点上的数据快照。Redis默认采用LZF算法对生成的RDB文件做压缩处理,压缩后文件的大小远远小于内存的大小。可以通过
config set rdbcompression {yes|no}
动态修改。 - Redis加载RDB恢复数据远远快于AOF的方式。
- RDB方式数据没办法做到实时持久化/秒级持久化,因为bgsave每次运行都要执行fork操作创建子进程,属于重量级操作。
- RDB采用特定二进制保存,在Redis多个版本中,可能出现不兼容的情况。
推荐阅读
- Redis|redis原理之布隆过滤器(Bloom Filter)
- redis安装与基本使用
- java|图解四种 IO 模型
- Redis|Redis性能解析--Redis为什么那么快()
- java|你跳一次涨多少(今天见识到跳槽天花板!!)
- java|送你一份大厂都这么解决Redis缓存问题,面试官必问!
- (免费领取红包封面)【Redis 系列】redis 学习四,set 集合,hash 哈希,zset 有序集合初步认知
- redis优化(bigkey、hotkey)
- redis高可用(主从、哨兵、集群)
- 【Redis 系列】redis 学习四,set 集合,hash 哈希,zset 有序集合初步认知