Redis 的持久化

Redis 支持RDB和AOF两种持久化机制,持久化可以避免因进程退出而造成数据丢失

RDB

RDB持久化把当前进程数据生成快照(.rdb)文件保存到硬盘的过程,有手动触发(命令)和自动触发(配置)。让它在“N 秒内数据集至少有 M 个改动”这一条件被满足时,自动保存一次数据集。

手动触发有 save 和 bgsave 两种命令

  • save:阻塞当前 Redis,直到 RDB 持久化过程完成为止,若内存实例比较大会造成长时间阻塞,线上环境不建议用它。
  • bgsave:Redis 进程执行 fork 操作创建子线程,由子线程完成持久化,阻塞时间很短(微秒级),是 save 的优化,在执行redis-cli shutdown 关闭 redis 服务时,如果没有开启 AOF 持久化,自动执行bgsave。
    在这里插入图片描述

相关操作

  • 更改 .db 文件路径:
    更改配置文件 redis.conf,搜索 dir,更改成你想要的的路径:
    在这里插入图片描述
    默认与配置文件在同一目录下。
  • 手动备份:bgsave
  • 备份恢复:需要将 .db 放在与配置文件同一目录下。所以,默认情况下,下次登录能看到上次遗留下来的信息。

优点

  • 压缩后的二进制文,适用于备份、全量复制,用于灾难恢复
  • 加载RDB恢复数据远快于AOF方式

缺点

  • 无法做到实时持久化,每次都要创建子进程,频繁操作成本过高
  • 保存后的二进制文件,存在老版本不兼容新版本 .rdb 文件的问题

AOF

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

流程

  1. 所有的写入命令会append 追加到 aof_buf 缓冲区中
  2. AOF 缓冲区向硬盘做 sync 同步
  3. 随着 AOF 文件越来越大,需定期对AOF文件 rewrite 重写,删除对最终结果没有影响的命令,达到压缩
  4. 当 redis 服务重启,可 load 加载 AOF 文件进行恢复

在这里插入图片描述

redis.conf 配置

  • 开启:appendonly yes(默认不开启,为no)
    在这里插入图片描述
  • 文件名:
    在这里插入图片描述
  • 同步策略:
    always:每收到写命令,立即写入。不推荐
    everysec:每秒写一次。默认
    no:完全依赖操作系统完成同步。同步没有保证
    在这里插入图片描述
  • 进行 rewrite 时,是否不 append:一般设置为 yes,不 append,避免阻塞主进程,但要承担宕机时丢数据的风险。
    在这里插入图片描述
  • 自动 aof 重写出发百分比:默认100,aof 文件大小每提升 100% 重写一次。
    在这里插入图片描述
  • 自动 aof 重写最小大小:默认至少到了 64M 重写 aof
    在这里插入图片描述

redis 重启时恢复流程

  1. 当AOF和RDB文件同时存在时,优先加载 AOF
  2. 若关闭了AOF,加载RDB文件
  3. 加载AOF/RDB成功,redis重启成功
  4. AOF/RDB存在错误,redis启动失败并打印错误信息

在这里插入图片描述

混合持久化

相关操作

配置:
aof-use-rdb-preamble yes # yes:开启,no:关闭

手动触发:
bgrewriteaof

文件结构

在这里插入图片描述

机制

开启混合持久化后,fork 出的子进程先将共享的内存里的数据的以 RDB 方式写入 AOF 文件,之后将 AOF 缓冲区的增量命令以 AOF格式写入到文件。

恢复的时候,先恢复 AOF 文件的 RDB 内容,再恢复 AOF 内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值