Redis持久化-RDB和AOF

Redis的持久化包括RDB和AOF两种方式。RDB是快照持久化,通过保存特定时刻的数据到硬盘,恢复速度快但可能丢失部分数据;AOF持久化记录每次写命令,数据完整性高,但恢复较慢。RDB适用于全量备份,AOF适合实时性要求高的场景。可以通过配置参数调整触发持久化的条件和数据同步策略。

持久化的功能: Redis是内存数据库, 数据都是存储在内存中, 为了避免进程退出导致数据的永久丢失, 需要定期将Redis中的数据以某种形式(数据或命令) 从内存保存到硬盘。 当下次Redis重启时, 利用持久化文件实现数据恢复。 除此之外, 为了进行灾难备份, 可以将持久化文件拷贝到一个远程位置。 Redis持久化分为 RDB 持久化和 AOF 持久化, 前者将当前数据保存到硬盘, 后者则是将每次执行的写命令保存到硬盘。(rdb保存的是数据,aof保存的是命令)。

RDB持久化:

RDB是一种快照存储持久化方式, 具体就是将Redis某一时刻的内存数据保存到硬盘的文件当中, 默认保存的文件名为dump.rdb, 而在Redis服务器启动时, 会重新加载dump.rdb文件的数据到内存当中恢复数据。 触发 RDB 持久化过程分为手动触发和自动触发。

服务器配置自动触发

# 默认的设置为:

save 900 1

save 300 10

save 60 10000

# 以下设置方式为关闭RDB快照功能

save ""

以上三项默认信息设置代表的意义是:

  • 如果900秒内有1条Key信息发生变化,则进行快照;
  • 如果300秒内有10条Key信息发生变化,则进行快照;
  • 如果60秒内有10000条Key信息发生变化,则进行快照。读者可以按照这个规则,根据自己的实际请求压力进行设置调整。
  • 其它相关配置

# 文件名称
dbfilename dump.rdb

# 文件保存路径
dir ./

# 如果持久化出错,主进程是否停止写入
stop-writes-on-bgsave-error yes

# 是否压缩
rdbcompression yes

# 导入时是否检查
rdbchecksum yes

AOF持久化

 AOF(Append Only File)持久化是把每次写命令追加写入日志中,当需要恢复数据时重新执行AOF文件中的命令就可以了。AOF解决了数据持久化的实时性,也是目前主流的Redis持久化方式。

开启 AOF 功能需要设置配置: appendonly yes, 默认不开启。 AOF 文件名通过 appendfilename 配置设置, 默认文件名是 appendonly.aof。 保存路径同RDB 持久化方式一致, 通过 dir 配置指定

 持久化配置:

appendonly yes #启用aof持久化方式

appendfsync always #每次收到写命令就立即强制写入磁盘, 最慢的大概只有几百的TPS, 但是保证完全的持久化, 不推荐使用

appendfsync everysec #每秒钟强制写入磁盘一次, 在性能和持久化方面做了很好的折中, 推荐 appendfsync no #完全依赖os, 性能最好,持久化没保证, Redis不会主动调用fsync去将AOF日志内容同步到磁盘, 所以这一切就完全依赖于操作系统的调试了。 对大多数Linux操作系统, 是每30秒进行一次fsync, 将缓冲区中的数据写到磁盘上。

 

RDB和AOF对比

RDB的优点:

  1. RDB文件非常紧凑,节省内存空间;
  2. RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快;
  3. 适合全量备份、全量复制的场景,经常用于灾难恢复(对数据的完整性和一致性要求相对较低的场合)

RDB的缺点:

  1. 服务器宕机时,可能会丢失部分数据;
  2. 每次保存RDB的时候,Redis都要fork出一个子进程,这个过程是阻塞的,如果数据集巨大,那阻塞的时间就会很长。

AOF的优点:

  1. 数据更加完整,丢失数据的可能性较低;
  2. AOF日志文件可读,并且可以对AOF文件修复。

AOF的缺点:

  1. AOF日志记录在长期运行中逐渐庞大,恢复起来非常耗时,需要定期对AOF日志进行瘦身处理;
  2. 恢复备份速度比较慢。
### Redis RDB AOF 持久化方式对比 #### 1. 基本概念 Redis 提供了两种主要的持久化机制:RDBRedis DataBase) AOF(Append Only File)。 - **RDB** 是一种快照形式的持久化方法,它会在指定的时间间隔内保存内存中的数据到磁盘上[^2]。 - **AOF** 则通过记录服务器接收到的每一条命令来实现持久化,类似于数据库的日志追加操作[^3]。 --- #### 2. 数据存储格式 - **RDB**: 存储的是某一时刻的数据快照,采用紧凑型二进制格式,因此文件体积更小,适合用于备份或灾难恢复场景[^1]。 - **AOF**: 记录的是每次写入操作的具体指令,以纯文本的形式保存,便于理解修改。 --- #### 3. 对性能的影响 - **RDB**: 创建快照的过程通常由后台子进程完成,不会阻塞主线程处理客户端请求,从而对 Redis 的正常运行影响较小。然而,在高并发环境下频繁触发快照可能会增加 I/O 负载。 - **AOF**: 每次执行写操作都会同步至日志文件,默认情况下可能带来一定的延迟开销。不过可以通过配置 `appendfsync` 参数调整盘频率(如 always、everysec 或 no),在安全性性能之间找到平衡点。 --- #### 4. 故障恢复能力 - **RDB**: 如果发生宕机事件,则最后一次成功生成的快照之后新增的数据将会丢失;但由于其结构简单高效,在大规模数据集加载时速度较快。 - **AOF**: 可提供更高的数据安全性保障,即使系统崩溃也能依据完整的命令序列重建原始状态。但是随着日志增长过大会降低启动效率,需定期启用重写功能优化大小。 --- #### 5. 使用场景推荐 | 特性/需求 | 推荐方案 | |------------------|------------------| | 高效备份 | RDB | | 极致数据保护 | AOF | | 快速重启恢复 | RDB | | 易维护可调试性 | AOF | 实际应用中还可以两者结合使用——利用 RDB 实现周期性的冷备存档,同时依靠 AOF 来弥补实时增部分的安全隐患。 ```python # 启用混合模式示例配置 (redis.conf) save 900 1 # 设置 RDB 自动保存条件之一 appendonly yes # 开启 AOF 功能开关 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值