Redis的RDB持久化
为什么需要RDB持久化
因为Redis是存储在内存中的,一旦Redis进程退出,那么内存中所有Redis的数据也会消失,所以需要有一种方法将Redis存储到硬盘上,以防止数据丢失。
什么是RDB持久化
RDB持久化就是将Redis在内存中的数据库保存到硬盘中,以防止数据丢失的问题。
RDB持久化可以手动进行,也可以通过服务器配置选项定期执行。该功能可以将一个时间点上的Redis数据库状态存储成为硬盘中的一个RDB文件。
RDB文件是RDB持久化功能生成的一个进过压缩的二进制文件,该文件可以还原成Redis的数据库状态。
RDB文件保存在硬盘中,所以进程的退出不会影响它。
如何进行RDB持久化
Redis保存和载入RDB文件的方法,主要通过SAVE和BGSAVE命令保存,通过Redis服务器配置文件自动保存,载入工作在服务器启动时自动载入。
RDB文件的创建和保存
1、SAVE创建RDB
SAVE命令会阻塞Redis服务器进程,直到RDB文件创建完毕为止,在服务器进程阻塞期间,服务器不能处理任何命令请求:
redis>SAVE //等待直到RDB文件创建完毕
OK
2、BGSAVE创建RDB
BGSAVE命令会派生一个子进程,然后由子进程负责创建RDB文件,服务器进程(父进程)继续处理命令请求:
redis>BGSAVE //派生子进程,并由子进程创建RDB文件
Background saving started
3、RDB文件的载入
启动Redis数据库时自动载入
AOF文件的更新频率通常比RDB文件的更新频率高,所以:
- 如果服务器开启了AOF持久化功能,那么服务器会优先使用AOF文件来还原数据库状态。
- 只有在AOF持久化功能处于关闭状态时,服务器才会使用RDB文件来还原数据库状态。
4、RDB文件的自动保存
对Redis服务器提供以下配置:
save 900 1
save 300 10
save 60 10000
以上配置只需满足一个条件,就会执行BGSAVE命令:
- 服务器在900秒之内,对数据库进行了至少1次修改。
- 服务器在300秒之内,对数据库进行了至少10次修改。
- 服务器在60秒之内,对数据库进行了至少10000次修改。
服务器启动后该配置将保存在saveparams数组中。
注:除了saveparams数组之外,还有dirty计数器和lastsave属性。 - dirty记录距离上一次成功执行SAVE或BGSAVE命令之后,服务器进行的修改次数。
- lastsave属性记录了上一次执行SAVE命令或BGSAVE命令的时间。
- Redis服务器的周期性操作函数serverCron默认每隔100毫秒执行一次,用于维护正在运行的服务器,检查save选型所设置的保持条件是否满足。

浙公网安备 33010602011771号