概述

Redis的持久化有2种方式:快照rdb日志aof
由于rdb是在某个时间点来备份的,直接备份二进制映像文件,恢复速度快。但是由于是在时间点备份的,在备份之前进程突然被杀掉就导致上个备份点到这个备份点之间的数据都丢失了;所以要结合Aof日志来一起备份,再加上一个主从配置就比较完美了;

快照配置

save 900 1      #900秒内,有1条写入,则产生快照 
save 300 1000   #如果300秒内有1000次写入,则产生快照
save 60 10000   #如果60秒内有10000次写入,则产生快照  
# 从下往上,一个梯形结构;
# 这3个选项都屏蔽,则rdb禁用;

stop-writes-on-bgsave-error yes #后台备份进程出错时,主进程停不停止写入?不停止写入的话,有可能数据一致性出现偏差 
rdbcompression yes               #导出的rdb文件是否压缩
Rdbchecksum   yes                #导入rbd恢复时数据时,要不要检验rdb的完整性
dbfilename    dump.rdb           #导出来的rdb文件名
dir ./                           #rdb的放置路径

Aof的配置

appendonly no  # 是否打开aof日志功能
appendfsync everysec # 折中方案,每秒写1次
appendfsync always   # 每1个命令,都立即同步到aof. 安全,速度慢
appendfsync no       # 写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到aof. 同步频率低,速度快;
no-appendfsync-on-rewrite  yes  # 正在导出rdb快照的过程中,要不要停止同步aof
auto-aof-rewrite-percentage 100 #aof文件大小比起上次重写时的大小,增长率100%时,重写
auto-aof-rewrite-min-size 64mb  #aof文件,至少超过64M时,重写
重写: redis内存里的key-value逆化;比如set num 1,incr num 1....到100;把这一百个递增的结果直接逆化成set num 100;而不是再搞一百个命令;

问题解答

问: 在dump rdb过程中,aof如果停止同步,会不会丢失?
答: 不会,所有的操作缓存在内存的队列里, dump完成后,统一操作.

问: aof重写是指什么?
答: aof重写是指把内存中的数据,逆化成命令,写入到.aof日志里.以解决aof日志过大的问题.

问: 如果rdb文件,和aof文件都存在,优先用谁来恢复数据?
答: aof

问: 2种是否可以同时用?
答: 可以,而且推荐这么做

问: 恢复时rdb和aof哪个恢复的快
答: rdb快,因为其是数据的内存映射,直接载入到内存,而aof是命令,需要逐条执行redis 服务器端命令


菜问
625 声望132 粉丝

10年后端开发,常用编程语言PHP,java,golang,python。