Redis 持久化机制RDB(Redis DataBase)和AOF(Append-Only File) 学习总结

1. RDB(Redis DataBase)快照

通过某个时间点或者每隔一定时间对当前redis 中的所有数据进行备份。

1.1 触发方法:

save命令,bgsave命令,自动化配置

save命令

阻塞当前 redis 服务器,命令执行期间,Redis不能处理其他命令,如果还在被使用期间慎用!

bgsave命令

主进程 fork 一个子进程来完成RDB的过程,完成后自动结束子进程,阻塞时间极短。

自动化配置

作为一个配置项来触发,例如在 redis.conf 中配置

第一行为先关闭 AOF 模式,这样就只开启了 RDB

bash 复制代码
appendonly no

save 600 10

save 600 10 可以翻译为如果 600 秒内发生有10个或10个以上键发生修改那么就触发备份任务
save 可以写多个例如

bash 复制代码
save 600 10
save 60 100

写多个时是或的关系,任意一个满足都会触发

1.2 执行流程

1.主进程先检查是否有正在执行的 RDB或AOF 持久化任务,如果有则什么都不做直接结束。

2.主进程会 fork 一个子进程来执行RDB备份任务,fork 操作会短暂阻塞主进程(Redis读写操作) 子进程操作完成后会发消息给主进程,主进程恢复读写能力。

3.子进程根据主进程的当前的内存数据生成临时快照文件,持久化完成后会使用临时快照文件替换掉原有RDB文件。

(该过程中主进程的读写不受影响,但Redis的写操作不会同步到主进程的主内存中,而是会写到一个临时的内存区域作为副本)

4.子进程完成 RDB 持久化后会发消息给主进程通知 RDB 持久化完成(将上阶段内存副本中增量的写操作产生的数据再同步到主内存中)

1.3 优缺点

优点

1.RDB使用一种紧凑的二进制格式来存储数据(RDB格式的文件),因此速度非常快。在恢复大量数据时,它通常比AOF快得多。

2.RDB对于在磁盘上的数据备份和恢复非常有用,子进程操作数据对主进程影响较小。

缺点

RDB 快照是定期执行不是实时执行从而无法保证数据的实时性(读写磁盘文件等都需要时间),同时如果 redis 在生成或者替换快照期间崩溃,将丢失最新的数据。

2. AOF(Append-Only File)

是增量的记录所有写操作到aof 日志文件中,通过重新执行该日志文件中的所有指令来恢复所有数据。

动态的实时的去更新备份数据能比较完成的备份所有数据,但操作过于频繁会对redis 性能有较大的影响。

2.1 触发方法:

开启配置的方法

通过修改 redis.conf 来配置 AOF

开启AOF持久化,去掉注释即可

bash 复制代码
appendonly yes

持久化策略:

设置持久化策略(always、everysec、no)

例如

bash 复制代码
appendfsync everysec

always :同步持久化,只要有更改就去更新,虽然保证了数据都可以备份,但是大量数据时对性能而言影响较大
everysec : 异步持久化,每秒去更新数据,最多丢失一秒数据
no:由操作系统决定持久化频率,这种方式相对其他两种而言性能最好,但间隔时间过长时丢失的数据也很多,丢失的量不好估计,不可控。

2.2 优缺点

优点

1.增量的记录写操作,数据几乎都可以完成的记录下来,丢失的很少或者几乎不丢失数据。

2.写入速度快,不需要磁盘中寻址

3.AOF 日志文件过大时,会压缩指令,生成可以恢复全部数据的更小日志文件,不会影响主进程读写。

缺点

1.记录每一个写操作,相比 RDB 操作会更频繁,速度较慢,性能影响较大。

2.使用的写指令恢复数据,相比 RDB 更容易出错。同样的数据 AOF 文件会更大一些,需要定期压缩的清理。

2.3 AOF 重写流程

1.当AOF文件达到一定条件时会触发重写,可以配置修改

如果当前的 AOF 文件比上次执行重写时的文件大 100% 时会再次触发重写操作。

但如果该参数取值为 0 则不会触发重写操作。

bash 复制代码
auto-aof-rewrite-percentage 100

指定触发重写时AOF文件大小

bash 复制代码
auto-aof-rewrite-min-size 64mb

默认配置是 当AOF文件大小是上次重写后大小的一倍且文件大于64MB时触发

2.重写时主进程会创建一个子进程生成新的 AOF 日志文件,该文件会保留能恢复数据的最小指令集。

3.在创建新的 AOF 日志文件期间 redis 会额外创建一个缓存区存放创建文件期间的所有写操作。

4.然后读取 redis 中键值对,生成一份能恢复数据的最小文件。新文件生成后再将上面缓存区的写指令也加入,最后替换旧的 AOF 文件。

3.混合持久化

redis 4.0 新增

字面意思,将两种持久化方式都开启使用。

通过配置开启

bash 复制代码
aof‐use‐rdb‐preamble yes

例如恢复时先恢复上次快照留下的数据,然后再恢复快照后记录的所有写操作指令。

3.1 混合持久化流程

1.在执行 AOF 重写这一刻前内存的数据做 RDB 快照处理

2.然后将 RDB 内的数据和增量的写操作指令一同写入新的 AOF 文件。写入完成后覆盖原有旧文件。

重启时可以先加载RDB 快速恢复大量数据,然后使用AOF 恢复增量写指令,使数据尽量保持完成的情况下还能提高性能和重启速度。

参考资料如下:
https://blog.csdn.net/weixin_37672801/article/details/127476772

https://new-developer.aliyun.com/article/1267270

相关推荐
广州灵眸科技有限公司7 小时前
xfce桌面触摸校准:基于灵眸科技EASY-EAl-Orin-Nano
数据库·windows·科技
憧憬成为web高手10 小时前
皮卡丘靶场速通--sql 2
数据库·sql·mybatis
段一凡-华北理工大学10 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
二宝哥11 小时前
CentOS 7.9 系统下 Redis 5.0.4 单机安装与源码编译安装指南
redis·centos
oradh12 小时前
Oracle XTTS实现跨版本迁移和升级(Oracle 11g单库升级至19C RAC集群)
数据库·oracle·11g升级19c·xtts跨版本迁移和升级
z1234567898613 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
程序猿DD13 小时前
一个 API Key,统一调用大模型、生图和联网搜索
数据库·网关
java_logo13 小时前
Docker Compose 部署 ClickHouse:快速搭建高性能列式数据库
数据库·clickhouse·docker·列式数据库·轩辕镜像·高性能数据库·clickhouse部署教程
TlSfoward14 小时前
抓包代理链路下的 TLS 指纹变化分析 TLSFOWARD抓包工具
数据库·爬虫·网络协议·搜索引擎·php
数智化管理手记14 小时前
账龄分析手工统计易遗漏?自动账龄分析工具怎么搭建
大数据·网络·数据库·人工智能·数据挖掘