因为Redis是内存数据库,它将自己的数据库存储在内存中,如果一旦服务器宕机或者二断电 断网,会导致数据丢失。所以我们要把Redis数据库存储磁盘中。所以Redis推出RDB持久化功能。该功能是将Redis中某个时间点的数据库保存在RDB文件中,该文件是经过压缩的二进制文件,通过此文件可以还原数据库状态。
一,RDB文件的创建和载入:
Redis中提供2个命令来生成RDB文件:SAVE和BGSAVE
在这里说一下SAVE和BGSAVE的区别,以下是2个方法伪代码(但这里你要有C语言和一点点切入式基础)
def SAVE():
#创建RDB文件
rdbSave();
def BGSAVE():
#创建子进程
pid = fork()
if pid == 0
#子进程负责创建RDB文件
rdbSave()
#完成向父进程发送信号
signal_parent()
elif pid>0:
#父进程继续处理命令,并通过轮训等待子进程的信号
handle_request_and_wait_signal()
通过这个伪代码,我们可以看到。SAVE方法是阻塞进程的。(就是当你执行SAVE方法,创建RDB文件,服务器不能处理其他命令请求),而BGSAVE通过创建子进程,让子进程去创建RDB文件,而父进程则可以处理其他命令请求。
RDB文件的载入是服务器启动时自动加载。
注意:因为AOF文件的更新频率比RDB文件快,所以Redis设置:
- 如果服务器开启AOF持久化,则Redis优先使用AOF来还原数据库状态
注意:服务器在载入RDB文件,会一直处理阻塞状态。
二,自动间隔性保存
看过Redis配置文件都知道,有
save 900 1
save 300 10
//服务器在60秒内,对数据库进行了至少10000次修改
save 60 10000
这是Redis默认配置文件配置间隔性保存参数。
那么只要满足一下三个中的一个条件,服务器就会触发一次BGSAVE()。
注意:RDB文件是一个经过压缩的二进制文件。
对于不同类型的键值对,RDB文件会使用不同的方式来保存它们。