1.简介
(1).什么是RDB

  • RDB持久化是指在指定的时间间隔内,使用命令的方式将内存中的数据写入磁盘
  • RDB是默认的持久化方式,默认的文件名为dump.rdb。
  • RDB文件还是一个复制媒介,可以使用RDB实现主从复制

(2).恢复

  • 当Redis重新启动时,会从本地磁盘加载之前持久化的文件
  • 当恢复完成之后,再受理后续的请求操作

(3).触发机制

  • save(同步)
  • bgsave(异步)
  • 自动生成

2.save

  • 执行方式:客户端执行save命令,Redis将创建一个rdb文件
  • 同步:如果数据量较大,会阻塞Redis执行其它命令
  • 文件策略:如果存在老的rdb文件,将会用新文件替换老文件
  • 时间复杂度:save命令的时间复杂度为O(n)
  • 5.2 Redis持久化之RDB_客户端

3.bgsave

  • 执行方式:客户端执行bgsave命令
  • 异步:Redis使用Linux的fork()函数生成一个Redis的子进程,由子进程去创建RDB文件,完成后自动结束。阻塞只发生在fork阶段,一般时间很短。基本上Redis内部所有的RDB操作都采用bgsave命令。
  • 文件策略:如果存在老的rdb文件,将会用新文件替换老文件
  • 时间复杂度:save命令的时间复杂度为O(n)
  • 5.2 Redis持久化之RDB_时间复杂度_02

4.自动生成
(1).频率

配置

seconds

changes

save

900

1

save

300

10

save

60

10000

配置从下往上看,如果Redis在60秒内改变了10000条数据,则通过bgsave生成一个rdb文件,以此类推。该方式的缺点在于无法控制生成rdb文件的频率。
一般在线上时会关闭该配置。

(2).配置

  • RDB文件名称
dbfilename dump.rdb
  • RDB默认文件存储路径(一般选择一个较大的磁盘)
dir ./
  • bgsave发生错误时是否停止写入
stop-writes-on-bgsave-error yes
  • RDB文件是否采用压缩格式
rdbcompression yes
  • 是否对RDB文件进行检验
rdbchecksum yes

(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,消耗内存资源