《Redis开发与运维》----- 持久化

Redis支持RDB和AOF两种持久化机制,持久化功能有效地避免因进程退出造成的数据丢失问题,当下次重启时利用之前持久化的文件即可实现数据恢复。

一、RDB(Redis Data Base 数据快照)

1、触发机制

  • 手动触发:
    save命令:阻塞当前Redis服务器,直到RDB过程完成。线上环境不建议使用。
    bgsave(background save)命令:Redis进程执行fork操作创建子进程,RDB持久化由子进程负责。阻塞只发生在fork阶段,时间很短。
    显然bgsave命令是针对save阻塞问题做的优化。因此Redis内部所有的涉及RDB的操作都采用bgsave的方式,而save命令已经废弃。
  • 自动触发:
    使用save相关配置,如“save m n”。表示m秒内数据集存在n次修改时,自动触发bgsave。
    如果从节点执行全量复制操作,主节点自动执行bgsave生成RDB文件并发送给从节点。
    执行debug reload命令重新加载Redis时,也会自动触发save操作。
    默认情况下执行shutdown命令时,如果没有开启AOF持久化功能则自动执行bgsave。

2、流程说明

在这里插入图片描述

  • 1、监测是否存在正在执行的子进程,如RDB/AOF进程,如果存在直接返回
  • 2、父进程创建子进程,fork过程中父进程会阻塞,通过info stats 命令查看latest_fork_usec选项查看最近一次fork的耗时,单位为微秒
  • 3、父进程fork完成后,返回“Backgroung saving started”,不在阻塞父进程,开始响应其他命令
  • 4、子进程创建RDB文件,根据父进程内存生成快照,完成后对原有文件进行原子替换
  • 5、子进程发送信号给父进程表示完成,父进程更新统计信息

3、RDB文件的处理

  • RDB文件保存在dir配置指定的目录下,文件名字为dbfilename配置。可以通过命令动态修改 config set dir {newDir};config set dbfilename {newFileName}
  • Redis采用默认的LZF算法对生成的RDB文件进行压缩,默认开启,虽然压缩过程会消耗cpu,但是可以大幅降低压缩后的文件体积,方便保存到磁盘和通过网络传输到从节点,线上建议开启
  • 如果Redis加载损坏的RDB文件时拒绝启动,可以使用Redis提供的redis-check-dump工具检测RDB文件生成对应的错误报告

4、RDB的优缺点

  • 优点:
    RDB是一个紧凑压缩的二进制文件,代表Redis在某个时间点上的快照。适用于备份、全量复制等场景。
    Redis加载RDB恢复数据的速度远远快于AOF的方式
  • 缺点:
    RDB没有办法做到实时持久化
    REB文件使用特定的二进制格式保存,存在老版本的服务器无法兼容新版RDB格式的问题

二、AOF(Append Only File 操作日志)

  • AOF(append only file)持久化:以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中的命令达到恢复数据的目的。AOF的主要作用是解决了数据持久化的实时性,目前已经是Redis持久化的主流方式。

  • AOF默认是默认不开启的,开启AOF功能需要设置配置:appendonly yes

1、AOF工作流程:命令写入(append) 、 文件同步(sync) 、 文件重写(rewrite) 、 重启加载(load)

在这里插入图片描述

  1. 所有的写入命令会追加到aof_buf(缓冲区)中。
  2. AOF缓冲区根据对应的策略向硬盘做同步操作。
  3. 随着AOF文件越来越大,需要定期对AOF文件进行重写,达到压缩的目的。
  4. 当Redis服务器重启时,可以加载AOF文件进行数据恢复。

2、命令写入

  • AOF为什么直接采用文本协议格式?文本协议兼容性好
  • AOF为什么把命令追加到aof_buf(缓冲区)中?
    1、如果每次写AOF文件命令都直接追加到硬盘,那么性能完全取决于当前硬盘负载。
    2、缓冲区aof_buf中,Redis可以提供多种缓冲区同步硬盘的策略,在性能和安全性方面做出平衡。

3、文件同步

AOF缓冲区同步文件策略,由参数appendfsync控制:

always    #每次有数据修改发生时都会写入AOF文件,这样会严重降低Redis的速度,不建议配置
everysec  #每秒钟同步一次,默认配置
no        #让操作系统决定何时进行同步

4、重写机制

AOF文件重写是把Redis进程内的数据转化为写命令同步到新- AOF文件的过程。重写后的AOF文件为什么可以变小?

  • 进程内已经超时的数据不在写入文件
  • 旧的AOF文件中含有无效命令,新的AOF文件只保留最终数据的写入命令
  • 多条写命令可以合并成一个

AOF重写过程触发过程:
手动触发:直接调用bgrewriteaof命令。
自动解发:根据auto-aof-rewrite-min-size和auto-aof-rewrite-percentage参数确定自动触发时机。

5、重启加载

AOF和RDB文件都可以用于服务器重启时的数据恢复。如果同时配了RDB和AOF,优先加载AOF。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值