Redis 集群持久化配置 RDB 和 AOF 怎么同时开启?

文章导读
在 Redis 集群中同时开启 RDB 和 AOF 持久化,需要在每个节点的 redis.conf 配置文件中同时进行设置。对于 RDB,配置 save 规则触发快照保存;对于 AOF,设置 appendonly yes 开启追加日志。两者同时开启时,重启恢复优先使用 AOF 文件以保证数据完整性。集群模式下需确保每个节点配置一致,且持久化文件路径独立,避免冲突。生产环境建议结合业务需求调整 sa
📋 目录
  1. 手撕 Redis 底层 3-持久化机制与集群化方案
  2. 快速入门 Redis 系列 (4)——Redis 的持久化
  3. 你只是简单的缓存 redis? 持久化配置一定要知道。
  4. 详细介绍 Redis 持久化机制 RDB 和 AOF
  5. FAQ
A A

在 Redis 集群中同时开启 RDB 和 AOF 持久化,需要在每个节点的 redis.conf 配置文件中同时进行设置。对于 RDB,配置 save 规则触发快照保存;对于 AOF,设置 appendonly yes 开启追加日志。两者同时开启时,重启恢复优先使用 AOF 文件以保证数据完整性。集群模式下需确保每个节点配置一致,且持久化文件路径独立,避免冲突。生产环境建议结合业务需求调整 save 频率和 AOF 同步策略,以平衡性能与数据安全。

手撕 Redis 底层 3-持久化机制与集群化方案

1.Redis 持久化机制 Redis 设计了两种持久化落盘机制:RDB 和 AOF 1.1 RDB 持久化 RDB 持久化是 Redis 的数据快照,简单来说就是把内存中的所有数据都记录到磁盘中,当 Redis 实例故障重启后,从磁盘中读取快照文件来恢复数据。快照文件称为 RDB 文件,默认保存在当前运行目录。触发时机:RDB 持久化在四种情况下会执行:执行 save 命令:执行下面的命令,可以立即执行一次 RDB: 编辑 save 命令会导致主进程执行 RDB,这个过程中其它所有命令都会被阻塞。只有在数据迁移时可能用到。执行 bgsave 命令:下面的命令可以异步执行 RDB: 编辑 这个命令执行后会开启独立进程完成 RDB,主进程可以持续处理用户请求,不受影响。Redis 停机时:Redis 停机时会执行一次 save 命令,实现 RDB 持久化。触发 RDB 条件时:Redis 内部有触发 RDB 的机制,可以在 redis.conf 文件中找到,格式如下:# 900 秒内,如果至少有 1 个 key 被修改,则执行 bgsave , 如果是 save "" 则表示禁用 RDBsave 900 1save 300 10save 60 10000 RDB 的其它配置也可以在 redis.conf 文件中设置:# 是否压缩,建议不开启,压缩也会消耗 cpu,磁盘的话不值钱 rdbcompression yes# RDB 文件名称 dbfilename dump.rdb# 文件保存的路径目录 dir ./

快速入门 Redis 系列 (4)——Redis 的持久化

由于 redis 是一个内存数据库,所有的数据都是保存在内存当中的,内存当中的数据极易丢失,所以 redis 的数据持久化就显得尤为重要,在 redis 当中,提供了两种数据持久化的方式,分别为 RDB 以及 AOF,且 redis 默认开启的数据持久化方式为 RDB 方式,接下来我们就分别来看下两种方式的配置吧~ 1.RDB 持久化方案介绍之 RDB 方案介绍 RDB 方案介绍 Redis 会定期保存数据快照至一个 rbd 文件中,并在启动时自动加载 rdb 文件,恢复之前保存的数据。可以在配置文件中配置 Redis 进行快照保存的时机:代码语言:javascript AI 代码解释 意为在 [seconds] 秒内如果发生了 [changes] 次数据修改,则进行一次 RDB 快照保存,例如 代码语言:javascript AI 代码解释 会让 Redis 每 60 秒检查一次数据变更情况,如果发生了 100 次或以上的数据变更,则进行 RDB 快照保存。可以配置多条 save 指令,让 Redis 执行多级的快照保存策略。Redis 默认开启 RDB 快照。redis.conf 文件中默认设置 手动触发保存快照 SAVE 或者 BGSAVE 命令手动触发 RDB 快照保存。SAVE 和 BGSAVE 两个命令都会调用 rdbSave 函数,但它们调用的方式各有不同: SAVE 直接调用 rdbSave ,阻塞 Redis 主进程,直到保存完成为止。在主进程阻塞期间,服务器不能处理客户端的任何请求。BGSAVE 则 fork 出一个子进程,子进程负责调用 rdbSave ,并在保存完成之后向主进程发送信号,通知保存已完成。

你只是简单的缓存 redis? 持久化配置一定要知道。

Redis 提供了多种不同级别的持久化方式:RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照 (point-in-time snapshot)。AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。Redis 还可以在后台对 AOF 文件进行重写 (rewrite),使得 AOF 文件的体积不会超出保存数据集状态所需的实际大小。Redis 还可以同时使用 AOF 持久化和 RDB 持久化。在这种情况下,当 Redis 重启时,它会优先使用 AOF 文件来还原数据集,因为 AOF 文件保存的数据集通常比 RDB 文件所保存的数据集更完整。你甚至可以关闭持久化功能,让数据只在服务器运行时存在。了解 RDB 持久化和 AOF 持久化之间的异同是非常重要的,以下几个小节将详细地介绍这这两种持久化功能,并对它们的相同和不同之处进行说明。RDB 的优点 RDB 是一个非常紧凑 (compact) 的文件,它保存了 Redis 在某个时间点上的数据集。这种文件非常适合用于进行备份:比如说,你可以在最近的 24 小时内,每小时备份一次 RDB 文件,并且在每个月的每一天,也备份一个 RDB 文件。这样的话,即使遇上问题,也可以随时将数据集还原到不同的版本。RDB 非常适用于灾难恢复 (disaster recovery):它只有一个文件,并且内容都非常紧凑,可以 (在加密后) 将它传送到别的数据中心,或者亚马逊 S3 中。RDB 可以最大化 Redis 的性能:父进程在保存 RDB 文件时唯一要做的就是 fork 出一个子进程,然后这个子进程就会处理接下来的所有保存工作,父进程无须执行任何磁盘 I/O 操作。RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。RDB 的缺点 如果你需要尽量避免在服务器故障时丢失数据,那么 RDB 不适合你。虽然 Redis 允许你设置不同的保存点 (save point) 来控制保存 RDB 文件的频率,但是,因为 RDB 文件需要保存整个数据集的状态,所以它并不是一个轻松的操作。因此你可能会至少 5 分钟才保存一次 RDB 文件。在这种情况下,一旦发生故障停机,你就可能会丢失好几分钟的数据。每次保存 RDB 的时候,Redis 都要 fork() 出一个子进程,并由子进程来进行实际的持久化工作。在数据集比较庞大时,fork() 可能会非常耗时,造成服务器在某某毫秒内停止处理客户端; 如果数据集非常巨大,并且 CPU 时间非常紧张的话,那么这种停止时间甚至可能会长达整整一秒。

Redis 集群持久化配置 RDB 和 AOF 怎么同时开启?

详细介绍 Redis 持久化机制 RDB 和 AOF

Redis 提供了两种数据持久化的方式,分别为 RDB 和 AOF,RDB 是基于内存快照的,它会将某一时刻 Redis 的内存状态写入磁盘,RDB 也是 Redis 默认采用的持久化方式,AOF 则是基于文件追加的机制来进行持久化的,如果我们开启 AOF 持久化,那么每写入一条数据,这个写入数据的命令就会被追加到 AOF 文件的尾部,下面详细介绍这两种持久化方式。RDB 持久化 RDB 是 Redis 默认的持久化方式,它是基于内存快照的持久化方式,何为快照?快照就是某一时刻 Redis 内存中的所有数据,就好比我们使用 WPS 编写文档,突然有事情需要处理,这时候我们要将电脑关闭,为了不让编辑的内容丢失,我们关闭 WPS 时它会提醒保存文档,这时候就会把到我们最后一刻操作之前的所有数据都保存下来,下次打开的时候,我们可以从上次编辑的地方继续。RDB 配置 我们关注以下三个配置就行 代码语言:javascript AI 代码解释 save360013001001010000dbfilename dump.rdb dir./ save 配置达到什么条件才保存内存快照,这个配置表示如果在 3600 秒内进行一次写操作,或者在 300 秒内进行 100 次写操作,又在 10 秒内进行 10000 次写操作,那么就会保存内存快照。dbfilename 表示生成的 RDB 二进制文件名,默认为 dump.db,dir ./是生成的 RDB 二进制文件的存放路劲。当上面的 save 中的条件触发,那么 Redis 就会保存内存快照,当然,我们也可以直接使用 SAVE 和 BGSAVE 命令来保存内存快照,save 这里的配置到最后还是去执行 SAVE 和 BGSAVE 命令,下面介绍 SAVE 和 BGSAVE 命令。SAVE 和 BGSAVE 命令 在 Redis 命令行执行 SAVE 命令或者 BGSAVE 命令都可能保存快照,只不过 SAVE 命令会阻塞 Redis 服务器,这时候客户端发送的所有请求 Redis 都会拒绝,如果 RDB 文件比较小的还好,如果比较大,那么恢复数据就需要花费一定的时间,对于客户端来就很不友好,所以这时候我们可以使用 BGSAVE 命令,执行 BGSAVE 命令,Redis 会 fork 一个子进程去保存内存快照,这样 Redis 服务器就不会阻塞。下面我们对配置进行修改来测试 rdb。改成下面配置,那么 10s 内如果有 1 次写操作,就会保存当前快照。

FAQ

Redis 集群中每个节点都需要配置持久化吗?

Redis 集群持久化配置 RDB 和 AOF 怎么同时开启?

是的,集群模式下每个节点独立存储数据,需分别配置 RDB 和 AOF 以确保各分片数据持久化。

同时开启 RDB 和 AOF 重启时优先加载哪个?

优先加载 AOF 文件,因为 AOF 记录的操作日志更完整,数据丢失风险更小。

Redis 集群持久化配置 RDB 和 AOF 怎么同时开启?

AOF 文件过大怎么办?

Redis 支持 AOF 重写(rewrite)机制,后台进程会合并命令,缩小文件体积而不丢失数据状态。