it编程 > 数据库 > Redis

Redis中RDB与AOF的区别及说明

37人参与 2025-12-24 Redis

1.概述

在redis的使用中,持久化是一个重要的特性,它将内存中的数据保存到硬盘上,以防止数据丢失。

redis 提供了三种主要的持久化方式:aof(append only file)、rdb(redis database)以及混合持久化(rdb和aof)。

本文将详细介绍 aof 和 rdb 的区别及配置方式,帮助读者更好地理解和选择合适的持久化方式。

2.rdb和aof

2.1 rdb

2.1.1 rdb概念

rdb 持久化方式是 redis 将当前内存中的数据快照(snapshot)保存到硬盘的过程。

这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。其实就是每隔一段时间,redis 会创建一个代表某一时刻的数据集的磁盘文件。

2.1.2 rdb工作原理(copy-on-write)

rdb 的生成过程依赖于操作系统的写时复制(cow)机制,这一机制确保了快照生成期间 redis 依然能正常处理读写请求,不会阻塞业务。

具体流程如下:

2.1.3 rdb触发方式

1.自动触发:基于配置的"指定时间+修改次数"

在redis 的配置文件(redis.conf)中,通过save指令定义rdb的触发规则,格式为:

save <seconds> <changes> [<seconds> <changes> ...]

表示 “在 seconds 秒内,若数据修改次数达到 changes 次,则触发 rdb”。

默认配置如下:

# 3600秒(1小时)内修改1次、300秒内修改100次、60秒内修改10000次,满足任一条件即触发rdb
save 3600 1
save 300 100
save 60 10000

2.手动触发:主动备份场景

手动触发主要通过save、bgsave指令实现:

3.rdb核心配置文件

#指定 rdb 文件的名称,默认为dump.rdb
dbfilename dump.rdb  
#指定 rdb 文件的保存路径,默认是 redis 的启动目录(建议改为绝对路径,如/var/redis/)
dir ./   
#是否对 rdb 文件进行压缩(默认开启,用 cpu 开销换取磁盘空间,关闭可提升快照速度)
rdbcompression yes  
#是否对 rdb 文件进行校验(默认开启,通过 crc64 算法确保文件完整性,关闭可提升加载速度)
rdbchecksum yes  

4.rdb优缺点

优点:

缺点:

2.2 aof

2.2.1 aof概念

aof其实就是将每一个收到的写命令都通过write函数追加到文件中,当 redis 需要恢复数据时,只需执行 aof 文件中的命令就可以恢复到原来的状态。

这个文件有点像mysql的binlog日志文件,只不过binlog日志文件是二进制,redis的aof生成的文件是文本格式。

2.2.2 aof工作原理

1.命令追加

3.日志重写

例如:

2.2.3 aof配置

1.启用aof

# 启用aof(默认no)
appendonly yes  
# aof文件名称,默认appendonly.aof
appendfilename "appendonly.aof" 
# aof文件保存路径,与rdb一致
dir ./  

2.刷盘策略

appendfsync定义了 aof 缓冲区的命令何时写入磁盘,有三种可选值:

解释
always每执行一条写命令,立即将缓冲区内容写入到磁盘,数据安全性高,io频繁
everysec每秒将缓冲区内容写入磁盘一次,数据安全性一般,性能适中
no由操作系统决定何时写入磁盘,默认30秒刷盘一次,数据安全性低,性能较高

3.日志重写规则

aof 重写同样支持自动触发和手动触发,自动触发通过auto-aof-rewrite-percentage和auto-aof-rewrite-min-size配置实现:

auto-aof-rewrite-percentage 100  # 当aof文件大小比上次重写后增大100%(即翻倍)时触发
auto-aof-rewrite-min-size 64mb   # 当aof文件大小至少达到64mb时才触发(避免小文件频繁重写)

手动触发:执行bgrewriteaof命令,主进程 fork 子进程完成重写,不阻塞业务(和bgsave类似)。

4.aof优缺点 

优点:

缺点:

2.3 rdb与aof对比

rdbaof
优点文件体积小,恢复速度相对较快,对系统性能影响较小可读性高,数据安全性高,支持实时恢复
缺点数据安全性相对较低,可读性低,无法满足大规模、对数据备份要求高的场景文件体积较大,恢复速度相对较慢,对系统性能有一定影响
适用场景对数据安全性要求相对较低,希望快速地进行数据恢复对数据安全性要求较高,而且可以接受稍慢一些的恢复速度

3.总结

1.rdb持久化方式能够在指定的时间间隔内对数据进行快照存储;

2.aof持久化方式记录每次对服务器写的操作,服务器重启时会重新执行这些命令来恢复原始的数据;

3.rdb和aof可同时开启,redis重启时会优先载入aof文件来恢复原始数据,因为通常情况下aof文件保存的数据集要比rdb文件保存的数据集要完整;

4.一般情况下,rdb文件只用作后备用途,建议只在slave机器上持久化rdb文件,并且只要15分钟备份一次就够了;

5.如果只做缓存,只希望数据在服务器运行的时候存在,其实不需要持久化操作。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

您想发表意见!!点此发布评论

推荐阅读

Redis的五种基本数据类型解读(String、List、Hash、Set、ZSet)

12-24

redis GEO数据结构、实现附近商铺功能实践

12-24

Redis内存回收用法及说明

12-24

Redis网络I/O模型的使用及说明

12-24

redis 中 redisTemplate 的所有操作与函数详解

12-23

Redis 分片集群搭建与故障转移实战指南(推荐)

12-23

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论