介绍
我们知道Redis是运行在内存中的数据库,那么当我们关闭Redis服务器后,内存中的数据会不会丢失?
当然是不会!因为Redis有持久化机制,所谓持久化,就是将内存中的数据保存到磁盘文件上,以此来达到永久保存数据的目的。
在Redis中,有两种持久化机制:
- RDB持久化
- AOF持久化
RDB持久化又叫做RDB快照,简单点说,RDB快照就是记录Redis中此刻这一瞬间的数据到文件中,“对Redis内存数据进行一次抓拍”。
RDB快照既可以手动执行,也可以自动定期执行,将此刻时间点上的数据库状态保存到一个RDB文件中。
手动执行
有两个Redis命令可以用于生成RDB文件:
SAVE
命令BGSAVE
命令
生成的RDB文件就是执行命令此刻的数据库状态
我们知道,Redis服务器是单进程(单线程)的,这两个命令的区别在于:- 当执行
SAVE
命令时,会阻塞Redis服务进程,直到RDB文件生成完毕,在此期间,Redis不会处理任何请求。 - 而
BGSAVE
命令不会阻塞服务器进程,而是先派生出一个子进程,由子进程来负责生成此刻的RDB文件,服务器进程可以继续处理请求。
自动定期执行
Redis允许我们通过配置选项,来每隔一段时间自动执行一次BGSAVE
命令
例如,我们在配置文件中给出参数:
save 900 1
这个配置意思是:服务器在900秒内,对数据库至少进行了1次修改,之后就会自动执行BGSAVE
命令。
我们还可以同时给出多个条件:
save 900 1
save 300 10
save 60 10000
满足以上条件之一,就会自动执行BGSAVE
命令:
- 900 秒之内,对数据库进行了至少 1 次修改;
- 300 秒之内,对数据库进行了至少 10 次修改;
- 60 秒之内,对数据库进行了至少 10000 次修改
RDB文件的载入
RDB文件的载入是在服务器启动时自动完成的,Redis中没有专门用于载入RDB文件的命令。
在服务器启动时,如果检测到RDB文件存在,那么就会自动载入RDB文件,内存中的数据就会恢复
注意:
- 如果服务器开启了AOF持久化功能,那么服务器会优先使用AOF日志来还原数据库状态
- 只有在AOF持久化功能关闭的状态下,服务器才会使用RDB文件来还原数据库状态
参考文章
- 《Redis设计与实现》
- RDB 快照是怎么实现的? | 小林coding