Redis持久化

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

RDB

RDB持久化是把当进程数据生成快照保存到硬盘的过程,触发RDB持久化过程分为手动触发和自动触发。

触发机制

手动触发分别对应save和bgsave命令:

  • save命令:阻塞当前Redis服务器,知道RDB过程完成为止,对内存比较大的实例会造成长时间阻塞,线上环境不建议使用。
  • bgsave命令:Redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束。阻塞只发生在fork阶段,一般时间很短。

除了手动触发,Redis内部还存在自动触发RDB的持久化机制:

  • 使用save相关配置,如“save m n”。表示m秒内数据集存在n此修改时,自动触发bgsave。
  • 如果从节点执行全量复制操作,主节点自动执行=bgsave生成RDB文件并发送给从节点。
  • 执行debug reload命令重新加载Redis时,也会自动触发save操作。
  • 默认情况下执行shutdown命令时,如果没有开启AOF持久化功能则自动执行bgsave。

流程说明

bgsave主流触发RDB持久化方式,运作流程

在这里插入图片描述

RDB文件处理

  • 保存:RDB文件保存在dir配置指定的目录下,文件名通过dbfilename配合指定。可通过执行config set dir{new Dir}和config set dbfilename{newFileName}运行期动态执行,当下次运行时RDB文件保存到新目录。
  • 压缩:Redis默认采用LZF算法对生成的RDB文件做压缩处理,压缩后文件远远小于内存大小,默认开启,可以通过参数config set rdbcompression{yes|no}动态修改。
  • 校验:如果Redis加载破坏的RDB文件时拒绝启动,并打印日志:
    在这里插入图片描述
    这时可以使用Redis提供的redis-check-dump工具检测RDB文件并获取对应的错误报告。

RDB的优缺点

  • RDB的优点
        RDB是一个紧凑压缩的二进制文件,代表Redis在某个时间点上的数据快照,非常适用于备份,全量复制等场景,用于灾难恢复。

       Redis加载RDB恢复数据远远快于AOF的方式。

  • RDB缺点
       RDB方式数据没有办法做到实时持久化/秒级持久化。因为bgsave每次执行都要执行fork操作创建子进程,属于重量级操作,频繁执行成本过高。

       文件使用特定二进制格式保存,Redis版本演进过程中有多个格式的RDB版本,存在老版本Redis服务无法兼容新版RDB格式的问题。

       针对RDB不合适实时持久化的问题,Redis提供了AOF持久化方式来解决。

AOF

AOF持久化:以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中的命令达到恢复数据的目的。AOF目前已经是Redis持久化的主流。

使用AOF

AOF工作流程图

在这里插入图片描述

命令写入

命令写入的内容直接是文本协议格式。

关于AOF的两个小疑惑

  • AOF协议为什么直接采用文本协议格式?
    文本协议具有很好的兼容性
    开启AOF后,所有写入命令都包含追加操作,直接采用协议格式没避免二次处理开销。
    文件协议具有可读性,方便直接修改和处理。

  • AOF为什么把命令追加到aof_buf中?
    -Redis使用单线程响应命令,如果每次写AOF文件命令都直接追加到硬盘,那么性能完全取决于当前硬盘负载。
    先写入缓冲区中,还有一个好处,Redis可以提供多种缓冲区同步硬盘的策略,在性能和安全方面做出平衡。

文件同步

Redis提供了多种AOF缓冲区同步文件策略,由参数appendfsync控制。

重写机制

随着命令不断写入AOF,文件会越来越大,未解决此问题,Redis引入AOF重写机制压缩文件体积。

重写后的AOF为什么可以变小

  • 进程已经超时的数据不再写入文件
  • 旧的AOF文件含有无效命令,如del key1、hdel key2等。重写使用进程内数据直接生成,这样新的AOF文件只保存最终数据的写入命令。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值