8.redis持久化配置

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可读性较高,适合保存增量数据,数据不易丢失文件体积大,恢复时间长数据备份
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值