Redis是内存数据库,为了保证数据不在故障后丢失,Redis须要将数据持久化到硬盘上。redis
Redis持久化有两种方式:一种是快照,全量备份。一种是AOF方式,连续增量方式。算法
RDB持久化就是把数据生成快照保存到硬盘的过程。每N分钟数据发送了M次写操做以后,从内存dump数据造成rdb文件,压缩后放在备份目录数据库
Redis-Server主进程会Fork一个子进程在后台生成RDB文件,主进程能够在不阻塞线程状况下接收其余命令。在主进程Fork过程当中会产生阻塞,Fork完成后不在阻塞主进程,持久化工做交给子进程,子进程会生成一个临时的快照文件,完成后会对原有文件进行替换。bash
在redis.conf文件中能够设置每N秒以后M个Key发生了写操做就保存快照。ui
格式为:save <seconds> <changes>
save 900 1 # 900秒以后至少有1个Key发生写操做
save 300 10 # 300秒以后至少有10个Key发生写操做
save 60 10000 # 60秒以后至少有10000个Key发生写操做
复制代码
先检查60秒以内是否有1000个写操做,再检查300秒以后是否有10个写操做,最后检查900秒以后是否有1个写操做。spa
若是想要禁用RDB功能能够注释掉全部的save配置,也能够将save配置改成save ""线程
RDB文件保存在dir配置的指定目录下,默认为redis-server启动目录,RDB文件文件名为dbfilename配置,默认为dump.rdb文件名,咱们能够更改dir和dbfilename配置修改文件保存的路径和文件名。code
dir ./
dbfilename dump.rdb
复制代码
经过config set dir {newDir}
动态修改dir配置cdn
> config set dir /Users/JAVA/Redis/RDB
OK
复制代码
经过config set dbfilename {newDbfilename}
动态修改RDB文件名称server
> config set dbfilename backup.rdb
OK
复制代码
RDB文件默认以LZF算法压缩保存,rdbcompression配置默认为yes,当改成no时表示不压缩。
rdbcompression yes
复制代码
经过config set rdbcompression {yes|no}
动态修改是否压缩
当快照过程当中发生错误能够经过stop-writes-on-bgsave-error配置禁止Redis再写入数据,默认为yes开启。
stop-writes-on-bgsave-error yes
复制代码
经过config set stop-writes-on-bgsave-error {yes|no}
动态修改是否开启RDB文件快照过程出错时禁止写入数据到Redis
在版本5中,为了保证RDB文件的完整性会在文件末尾加入一个CRC64的校验码。经过rdbchecksum配置是否开启,若是配置为no则使用0代替CRC64校验码,加载RDB文件时会跳过校验。
rdbchecksum yes
复制代码
经过config set rdbchecksum {yes|no}
动态修改是否添加校验码
save命令会使用阻塞主进程的方式生成RDB文件,这意味着生成RDB文件过程当中其余命令将阻塞等待RDB文件生成完成。因此不建议在生产环境使用。
> save
OK
复制代码
bgsave命令会使用和自动触发生成RDB文件同样,在后台fork()一个子进程生成RDB文件。能够经过lastsave命令查看是否成功。
> bgsave
Background saving started
> lastsave
(integer) 1565190498
复制代码
本人深知水平有限,欢迎指正本文错误之处。