RDB持久化功能默认开启,一次性可以将服务器包含的所有数据以二进制文件的形式保存到硬盘里,这是一个非常消耗资源和时间的操作,不能执行过于频繁,会影响服务器性能,可能会丢失数据

 

 

 

save

服务器执行客户端发送的save命令,可以命令服务器去创建一个新的RDB文件,但是redis服务会被阻塞,无法处理客户端发送的命令,只有在save命令执行完毕之后(即RDB文件创建完毕),服务器才会重新开始处理客户端发送的命令请求,如果RDB文件已存在,服务器将自动使用新的RDB文件代替旧的RDB文件。

-rw-r--r--.  1 root root 92 Dec 15 11:44 dump.rdb  save前
127.0.0.1:6379> save        #执行RDB持久化
OK
127.0.0.1:6379> lastsave   #save后的Unix时间戳
(integer) 1544845527
-rw-r--r--. 1 root root 92  Dec 15 11:45 dump.rdb     save后

bgsave

服务器执行客户端发送的bgsave命令,同样可以执行创建一个新的RDB文件bgsave不会造成redis服务器阻塞,当redis服务器接受bgsave命令时,会通过fork生成一个子进程,由子进程负责创建RDB文件,自己继续处理客户端请求,但是会消耗额外内存。

127.0.0.1:6379> bgsave        #其他与save相同
Background saving started   

命令

save

bgsave

IO类型

同步

异步

阻塞

是(阻塞发生在fork)

复杂度

O(n)

O(n)

优点

不会消耗额外内存

不阻塞客户端命令

缺点

阻塞客户端命令

需要fork,消耗内存

使用save配置选项设置的自动保存条件被满足,服务器会自动执行bgsave。每次创建RDB文件后,服务器为实现自动持久化而设置的时间计数器和次数计数器会被清零,并重新开始计数,所以多个保存条件的效果不会叠加。

save 900 1           #900秒内有1条改变,生成快照
save 300 10          #300秒内有10条改变,生成快照
save 60 10000        #60秒内有10000条改变,生成快照   
#三个条件满足一个即生成快照,可以自定义多个条件#

stop-writes-on-bgsave-error yes #后台备份进程出错时,是否停止写入

rdbcompression yes #导出的rdm文件是否压缩

rdbchecksum yes #导出rdb恢复数据时,要不要检查rdb的完整性

dbfilename dump-${port}.rdb #导出rdb文件名

dir /bigdiskpath #导出rdb路径

触发机制

1.全量复制

2.debug reload

3.shutdown