Redis 持久化 RDB 与 AOF的执行过程


Posted in Redis onNovember 07, 2021

前言

Redis 持久化支持两种方式 RDB 与 AOF,文章记录两者的执行过程与配置。

一、RDB

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

1. save 命令

会堵塞当前 Redis 服务器,直到 RDB 结束为止,对数据量较大或者内存较大的实例,会堵塞较长时间,生产环境不建议使用。如果手动执行 save 命令,Redis 会记录下方日志。

127.0.0.1:6379> save
OK

* DB saved on disk

2. bgsave 命令

Redis 进程执行 fork 操作创建子进程,RDB 持久化过程由子进程负责,完成后自动结束。阻塞只发生在 fork 阶段,一般时间很短。如果手动执行 bgsave 命令,Redis 会记录下方日志。

* Background saving started by pid 90338
* DB saved on disk
* RDB: 0 MB of memory used by copy-on-write
* Background saving terminated with success

bgsave 对 save 堵塞进行优化,Redis 内部涉及 RDB 操作都是由 bgsave 完成。

3. 内部触发 RDB 场景

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

4. RDB 参数配置

通过设置 dir 可以配置 RDB 保存位置 dbfilename 可以设置文件名。

config set dir /opt/redis-5.0.12/backup
config set dbfilename myback.rdb

Redis 默认采用 LZF 算法对生成的RDB文件做压缩处理,压缩后的文件远远小于内存大小,默认开启,可以通过 rdbcompression 参数配置。

config set rdbcompression{yes|no}

压缩 RDB 虽然会消耗 CPU 但是可以大幅度减少文件体积,方便存储或通过网络发送给从节点。

5. RDB 缺点

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

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

二、AOF

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

1. 参数配置

# 配置开启 AOF
config set appendonly yes
# 配置文件名,默认 appendonly.aof
config set appendfilename xxx.aof
# 存储位置配置,与 RDB 一样
config set dir /opt/redis-5.0.12/backup

2. AOF 执行流程

Redis 持久化 RDB 与 AOF的执行过程

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

手动触发:

bgrewriteaof

自动触发,根据下方两个参数设置自动触发机制:

auto-aof-rewrite-min-size
auto-aof-rewrite-percentage

到此这篇关于Redis 持久化 RDB 与 AOF的文章就介绍到这了,更多相关Redis 持久化 RDB 与 AOF内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Redis 相关文章推荐
详解RedisTemplate下Redis分布式锁引发的系列问题
Apr 27 Redis
redis哨兵常用命令和监控示例详解
May 27 Redis
SpringBoot 集成Redis 过程
Jun 02 Redis
Redis可视化客户端小结
Jun 10 Redis
Redis主从配置和底层实现原理解析(实战记录)
Jun 30 Redis
Redis Cluster 集群搭建你会吗
Aug 04 Redis
Jedis操作Redis实现模拟验证码发送功能
Sep 25 Redis
redis的list数据类型相关命令介绍及使用
Jan 18 Redis
redis击穿 雪崩 穿透超详细解决方案梳理
Mar 17 Redis
高并发下Redis如何保持数据一致性(避免读后写)
Mar 18 Redis
redis lua限流算法实现示例
Jul 15 Redis
Redis主从复制操作和配置详情
Sep 23 Redis
Redis模仿手机验证码发送的实现示例
redis中lua脚本使用教程
Redis高并发防止秒杀超卖实战源码解决方案
Redis的字符串是如何实现的
SpringBoot集成Redis的思路详解
详解redis在微服务领域的贡献
详解Redis在SpringBoot工程中的综合应用
Oct 16 #Redis
You might like
phpmyadmin中配置文件现在需要绝密的短语密码的解决方法
2007/02/11 PHP
php 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
2010/10/22 PHP
PHP编程中的__clone()方法使用详解
2015/11/27 PHP
JQuery1.4+ Ajax IE8 内存泄漏问题
2010/10/15 Javascript
Safari5中alert的无限循环BUG
2011/04/07 Javascript
jsTree 基于JQuery的排序节点 Bug
2011/07/26 Javascript
15个款优秀的 jQuery 图片特效插件推荐
2011/11/21 Javascript
利用jquery的获取JS文件中的字符串内容
2012/02/14 Javascript
jQuery中append()方法用法实例
2015/01/08 Javascript
jquery滚动特效集锦
2015/06/03 Javascript
javascript中window.open在原来的窗口中打开新的窗口(不同名)
2015/11/15 Javascript
举例说明如何为JavaScript的方法参数设置默认值
2015/11/17 Javascript
JAVASCRIPT代码编写俄罗斯方块网页版
2015/11/26 Javascript
简单实现jquery焦点图
2016/12/12 Javascript
js实现input密码框显示/隐藏功能
2020/09/10 Javascript
js中值引用和地址引用实例分析
2019/06/21 Javascript
jQuery实现回到顶部效果
2020/10/19 jQuery
[00:43]拉比克至宝魔导师密钥展示
2018/12/20 DOTA
[01:02:00]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第三场 1月24日
2021/03/11 DOTA
跟老齐学Python之关于循环的小伎俩
2014/10/02 Python
Python使用SocketServer模块编写基本服务器程序的教程
2016/07/12 Python
Django 使用logging打印日志的实例
2018/04/28 Python
python 在屏幕上逐字显示一行字的实例
2018/12/24 Python
基于梯度爆炸的解决方法:clip gradient
2020/02/04 Python
详解Django配置JWT认证方式
2020/05/09 Python
django 解决自定义序列化返回处理数据为null的问题
2020/05/20 Python
基于SQLAlchemy实现操作MySQL并执行原生sql语句
2020/06/10 Python
采用专利算法搜索最廉价的机票:CheapAir
2016/09/10 全球购物
Fresh馥蕾诗英国官网:法国LVMH集团旗下高端天然护肤品牌
2018/11/01 全球购物
Puma印度官网:德国运动品牌
2019/10/06 全球购物
意大利时尚奢侈品店:D’Aniello Boutique
2021/01/19 全球购物
奥巴马连任演讲稿
2014/05/15 职场文书
村干部任职承诺书
2015/01/21 职场文书
八月一日观后感
2015/06/10 职场文书
2016年春季运动会广播稿
2015/08/19 职场文书
SQLServer2019 数据库的基本使用之图形化界面操作的实现
2021/04/08 SQL Server