1.简介
(1).什么是RDB
- RDB持久化是指在指定的时间间隔内,使用命令的方式将内存中的数据写入磁盘
- RDB是默认的持久化方式,默认的文件名为dump.rdb。
- RDB文件还是一个复制媒介,可以使用RDB实现主从复制
(2).恢复
- 当Redis重新启动时,会从本地磁盘加载之前持久化的文件
- 当恢复完成之后,再受理后续的请求操作
(3).触发机制
- save(同步)
- bgsave(异步)
- 自动生成
2.save
- 执行方式:客户端执行save命令,Redis将创建一个rdb文件
- 同步:如果数据量较大,会阻塞Redis执行其它命令
- 文件策略:如果存在老的rdb文件,将会用新文件替换老文件
- 时间复杂度:save命令的时间复杂度为O(n)
3.bgsave
- 执行方式:客户端执行bgsave命令
- 异步:Redis使用Linux的fork()函数生成一个Redis的子进程,由子进程去创建RDB文件,完成后自动结束。阻塞只发生在fork阶段,一般时间很短。基本上Redis内部所有的RDB操作都采用bgsave命令。
- 文件策略:如果存在老的rdb文件,将会用新文件替换老文件
- 时间复杂度:save命令的时间复杂度为O(n)
4.自动生成
(1).频率
配置 | seconds | changes |
save | 900 | 1 |
save | 300 | 10 |
save | 60 | 10000 |
配置从下往上看,如果Redis在60秒内改变了10000条数据,则通过bgsave生成一个rdb文件,以此类推。该方式的缺点在于无法控制生成rdb文件的频率。
一般在线上时会关闭该配置。
(2).配置
- RDB文件名称
- RDB默认文件存储路径(一般选择一个较大的磁盘)
- bgsave发生错误时是否停止写入
- RDB文件是否采用压缩格式
- 是否对RDB文件进行检验
(3).触发机制-不容忽略的方式
- 主从复制:在主从复制时,主会自动生成rdb文件
- 重启:不需要清空内存的重启也会生成rdb文件
5.总结
(1).RDB总结
- RDB是Redis内存到硬盘的快照,用于持久化
- save通常会阻塞Redis
- bgsave不会阻塞Redis,但是会fork新进程
- save自动配置满足任一就会被执行
- 有些触发机制不容忽视
(2).save和bgsave对比
命令 | save | bgsave |
IO类型 | 同步 | 异步 |
阻塞 | 会 | 会(阻塞发生在fork阶段) |
复杂度 | O(n) | O(n) |
优点 | 不会消耗额外内存 | 不阻塞客户端命令 |
缺点 | 阻塞客户端命令 | 需要fork,消耗内存资源 |