Redis持久化:RDB
在默认情况下,Redis 将数据库快照保存在名字为 dump.rdb的二进制文件中
方式
产生一个RDB:
a. 阻塞方式:
客户端中执行save命令
b. 非阻塞方式:
bgsave
策略
自动:按照配置文件中的条件满足就执行BGSAVE
save 60 1000,Redis要满足在60秒内至少有1000个键被改动,会自动保存一次
手动:客户端发起SAVE、BGSAVE命令
SAVE命令
redis > save
阻塞Redis服务,无法响应客户端请求
创建新的dump.rdb替代旧文件
BGSAVE命令(异步命令)
redis > bgsave
非阻塞,Redis服务正常接收处理客户端请求
Redis会fork()一个新的子进程来创建RDB文件,子进程处理完后会向父进程发送一个信号,通知它处理完毕
父进程用新的dump.rdb替代旧文件
SAVE 和 BGSAVE 命令
SAVE不用创建新的进程,速度略快
BGSAVE需要创建子进程,消耗额外的内存
SAVE适合停机维护,服务低谷时段
BGSAVE适合线上执行
自动执行
本质上就是BGSAVE
默认配置
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
dir /var/lib/redis/6379
只要上面三个条件满足一个,就自动执行备份。
创建RDB文件之后,时间计数器和次数计数器会清零。所以多个条件的效果不是叠加的
优点
完全备份,不同时间的数据集备份可以做到多版本恢复
紧凑的单一文件,方便网络传输,适合灾难恢复
恢复大数据集速度较AOF快
缺点
会丢失最近写入、修改的而未能持久化的数据
fork过程非常耗时,会造成毫秒级不能响应客户端请求
生产环境
创建一个定时任务cron job,每小时或者每天将dump.rdb复制到指定目录
确保备份文件名称带有日期时间信息,便于管理和还原对应的时间点的快照版本
定时任务删除过期的备份
如果有必要,跨物理主机、跨机架、异地备份