序言
主要用于查看不同备份模式可以调优的一些方式.
- RDB: Redis服务器在规定时间内将内存中的数据保存到指定路径的文件中,服务器重启的时候直接将RDB文件读取到内存中
- AOF:Redis服务器以日志的形式追加所有的REDIS操作,服务器重启的时候读取AOF文件依次执行一遍.
关于RDB最主要的问题是在备份的时候.RDB备份需要fork一个线程处理,所当处理大批量的备份的时候会影响Redis服务的效率.而AOF是可以支持大批量的命令最佳且不影响Redis服务的效率cuiyoanan2000@163.com.
因为AOF文件会不断地增大.难免有命令记录不完整.以及命令沉余.所以提供能录入如下的功能:
- 支持redis-check-aof来进行日志修复
- 支持根据相关配置rewrite相关的aof文件.
RDB是Redis默认的备份方式.具体相关配置如下:
# RDB文件的名称
dbfilename dump.rdb
# 备份RDB和AOF文件存放路径
dir /usr/local/var/db/redis/
关于RDB的备份频率的调整如下:
save 900 1 #在900秒(15分钟)之后,如果至少有1个key发生变化,则dump内存快照。
save 300 10 #在300秒(5分钟)之后,如果至少有10个key发生变化,则dump内存快照。
save 60 10000 #在60秒(1分钟)之后,如果至少有10000个key发生变化,则dump内存快照。
##当snapshot时出现错误无法继续时,是否阻塞客户端“变更操作”,“错误”可能因为磁盘已满/磁盘故障/OS级别异常等
stop-writes-on-bgsave-error yes
##是否启用rdb文件压缩,默认为“yes”,压缩往往意味着“额外的cpu消耗”,同时也意味这较小的文件尺寸以及较短的网络传输时间
rdbcompression yes
AOF
相关的配置如下:
# 此选项为AOF功能的开关,默认为no,通过yes来开启aof功能
appendonly yes
# 指定AOF文件名称
appendfilename appendonly.aof
# 备份RDB和AOF文件存放路径
dir /usr/local/var/db/redis/
aof的备份模式为:
appendfsync always #每次有数据修改发生时都会写入AOF文件。
appendfsync everysec #每秒钟同步一次,该策略为AOF的缺省策略。
appendfsync no #从不同步。高效但是数据不会被持久化。
##aof文件rewrite触发的最小文件尺寸(mb,gb),只有大于此aof文件大于此尺寸是才会触发rewrite,默认“64mb”,建议“512mb”
auto-aof-rewrite-min-size 64mb
##相对于“上一次”rewrite,本次rewrite触发时aof文件应该增长的百分比。
##每一次rewrite之后,redis都会记录下此时“新aof”文件的大小(例如A),那么当aof文件增长到A*(1 + p)之后
##触发下一次rewrite,每一次aof记录的添加,都会检测当前aof文件的尺寸。
auto-aof-rewrite-percentage 100
RDB与AOF混合(redis5是默认开启的)
混合模式仍然是用的AOF的处理流程,不同的是保存的内容是 RDB与AOF的混合.简单的说:新的AOF文件前半段是RDB格式的全量数据后半段是AOF格式的增量数据.具体的流程如下所示:
- fork出的子进程先将共享的内存副本全量的以RDB方式写入aof文件
- 然后在将重写缓冲区的增量命令以AOF方式写入到文件--该出的缓冲区为备份redis时收到的Redis命令cuiyaonan2000@163.com
- 写入完成后通知主进程更新统计信息,并将新的含有RDB格式和AOF格式的AOF文件替换旧的的AOF文件
- 配置文件中开启的方式:aof-use-rdb-preamble:true