Redis的持久化配置
RDB(Redis DataBase)快照
介绍
- RDB是Redis默认的持久化方式,它会将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb,每次当redis重启之后,redis会先读dump.rdb文件,将数据从硬盘写入到内存中
RDB快照配置
# 900秒内(15分钟),有1条写入,则产生快照
save 900 1
# 300秒内(5分钟)有1000次写入,则产生快照
save 300 1000
# 60秒内(1分钟)有10000次写入,则产生快照
save 60 10000
# 当RDB持久化出现错误后,主进程是否停止写入,yes 停止写入 no 继续写入
stop-writes-on-bgsave-error yes
# rdb文件是否压缩,rdb文件压缩使用LZF压缩算法,yes压缩,消耗cpu资源,no不压缩,需要更多的磁盘空间
rdbcompression yes
# rbd恢复数据时,是否验证rdb的完整性,yes在保存时会消耗性能,no不验证可提高性能
rdbchecksum yes
# rdb文件名
dbfilename dump.rdb
# rdb和aof文件的存放路径
dir /redis
RDB保存快照的触发方式和运行原理
手动触发
-
save
- 该命令会阻塞当前Redis服务器,执行save命令期间,Redis不能处理其他命令,直到RDB过程完成为止。
-
bgsave
- Redis会单独fork一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件, 整个过程中,只有在fork子进程时产生阻塞,主进程是不进行任何的IO操作的,这就确保了极高的性能。
自动化
- 根据redis.conf配置里的save m n规则自动触发(用的是BGSAVE)
- 主从复制时,从节点全量复制时,主节点发送rdb文件给从节点完成复制操作,主节点会触发
- 执行Debug Relaod
- 执行Shutdown且没有开启AOF持久化
RDB恢复数据
- AOF开启时先关闭AOF持久化,因为在aof和rdb同时开启时,redis会优先使用aof恢复
- 将rdb文件放入持久化文件夹
- 启动redis将自动读取rdb文件,恢复数据
AOF(Append Only File)日志
介绍
- 记录下除了查询以外的所有变更数据库状态的指令,以append 的形式追加保存到AOF文件中,当服务器重启的时候会重新执行这些命令来恢复原始的数据。
AOF日志配置
# 是开启aof
appendonly no
# 配置aof文件名称
appendfilename = myaoffile.aof
# aof持久化策略的配置
appendfsync always # 每次命令执行都同步到aof,很慢,但是很安全
appendfsync everysec # 每秒写1次【默认配置】
appendfsync no # 写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到aof. 同步频率低,速度快,
# 加载aof时如果有错如何处理
aof-load-truncated yes # 如果该配置启用,在加载时发现aof尾部不正确是,会向客户端写入一个log,但是会继续执行,如果设置为no ,发现错误就会停止,必须修复后才能重新加载。
# 正在导出rdb快照的过程中,是否停止同步aof
no-appendfsync-on-rewrite no
# aof自动重写配置,当aof文件大小比起上次重写时的大小,增长率100%时,重写
auto-aof-rewrite-percentage 100
# 设置允许重写的最小aof文件大小,避免了达到约定百分比但尺寸仍然很小的情况还要重写
auto-aof-rewrite-min-size 64mb
AOF重写机制
AOF重写机制的作用
- 当系统一直运行,AOF文件越来越大,无效命令越来越多,就会造成磁盘资源浪费,恢复数据慢影响性能,此时就需要使用重写机制,将文件中无效的命令去除,使同一个key的值,只保留最后一次写入,去除已删除或者已过期数据的相关命令,减小AOF文件的大小
重写的触发方式
- 手动执行 bgrewriteaof 触发AOF重写
- 自动执行,配置重写策略
auto-aof-rewrite-min-size 64MB
auto-aof-rewrite-min-percenrage 100
重写的过程
- fork一个子进程,读取旧的AOF文件,压缩并写入到一个临时AOF
- 在重写过程中,主进程将接收到的指令,分别写入到旧的AOF,和一个缓冲区中,保证重写不丢失重写过程中的命令
- 子进程写完后,向主进程发送一个信号量,主进程就将缓冲区中的指令追加到新AOF。
- 用新的AOF替换旧的AOF,之后的新指令就追加到新的AOF。
AOF恢复数据
正常恢复
- 将文件放到dir指定的文件夹下,当redis启动的时候会自动加载数据,注意:
aof文件的优先级比dump大。
异常恢复
- 有些操作可以直接到appendonly.aof文件里去修改。
- 写坏的文件可以通过
redis-check-aof --fix进行修复
RDB和AOF对比
- 当RDB和AOF同时开启时,redis优先使用AOF恢复数据
| 类型 | 优势 | 劣势 | 使用场景 |
|---|---|---|---|
| RDB | 全量数据快照,文件小,恢复快 | 无法保证最近一次快照后的数据 | 可容忍部分数据丢失,跨数据中心的容灾备份 |
| AOF | 可读性较高,适合保存增量数据,数据不易丢失 | 文件体积大,恢复时间长 | 数据备份 |

被折叠的 条评论
为什么被折叠?



