redis--RDB AOF

一、RDB(Redis Database Backup file,数据快照)

1. 核心概念

把 Redis 某一时刻内存全部数据生成二进制快照文件存入磁盘;故障重启时加载快照恢复数据。

2. 两条核心命令

  1. save:主进程直接执行,全程阻塞 Redis,大数据量慎用。
  2. bgsave:fork 子进程后台生成 RDB,不阻塞主进程,生产常用。

fork:复制进程页表,使用写时复制(Copy On Write)

  • 读操作:父子进程共享同一块物理内存
  • 主进程写数据:先拷贝这份内存页面,在新副本上修改,不影响子进程正在持久化的数据

3. 自动触发配置(redis.conf)

复制代码
save 900 1    # 900s内至少1个key修改,触发bgsave
save 300 10   # 300s内至少10个key修改,触发bgsave
save 60 10000 # 60s内至少10000个key修改,触发bgsave
# save ""  代表关闭RDB持久化

rdbcompression yes # 是否开启RDB文件压缩(默认开启,消耗CPU)
dbfilename dump.rdb # RDB文件名
dir ./  # 文件存放目录

4. RDB 优缺点

✅ 优点:

  • 二进制文件,体积小,恢复速度快
  • 适合冷备份、全量迁移 ❌ 缺点:
  • 快照是间隔生成的,两次快照之间宕机会丢失这段时间所有数据
  • fork 子进程时,如果数据量巨大,会产生内存开销

二、AOF(Append Only File,追加日志文件)

1. 核心概念

记录每一条写命令 (读命令不记录),以追加的方式写入日志;重启时重新执行 AOF 里所有命令恢复数据。默认关闭,appendonly yes开启。

2. 刷盘策略 appendfsync

表格

配置 刷盘时机 优点 缺点
always 每条写命令立刻同步刷盘 可靠性最高,几乎不丢数据 性能最差
everysec(默认) 先放缓冲区,每秒刷盘 性能均衡 宕机最多丢失 1 秒数据
no 交给操作系统自动刷盘 性能最好 不可控,可能丢大量数据

3. AOF 重写 bgrewriteaof

问题:同一个 key 多次修改,AOF 会保存多条命令,文件持续膨胀,比如

复制代码
set num 123
set name jack
set num 666

重写后,直接合并成最少命令,结果等价:

复制代码
mset name jack num 666
  • 手动触发:bgrewriteaof,后台子进程重写,不阻塞主进程

  • 自动重写配置:

    auto-aof-rewrite-percentage 100 # 文件相比上次重写后增长100%触发
    auto-aof-rewrite-min-size 64mb # 文件最小达到64MB才触发重写

重写不是读取旧 AOF 文件,是读取当前内存数据直接生成最简命令。

4. AOF 优缺点

✅ 优点:

  • 数据安全性更高,默认最多丢 1s 数据
  • 日志可读,可人为修改修复 ❌ 缺点:
  • 文件体积通常远大于 RDB
  • 数据恢复时需要回放所有命令,恢复速度比 RDB 慢

三、RDB vs AOF 对比(面试高频)

表格

对比项 RDB AOF
保存内容 某一刻内存数据快照(二进制) 每条写命令日志
丢失数据 两次快照间全部丢失 默认最多丢失 1 秒
文件大小 更小 更大
恢复速度 快 慢
阻塞 save 阻塞;bgsave 仅 fork 瞬间短暂阻塞 重写时 fork 短暂阻塞,主流程基本不阻塞
优先级 Redis 重启时,优先加载 AOF(数据更完整) 优先级更高
相关推荐
这个DBA有点耶14 小时前
从症状到根因:数据库监控指标的分层方法与静态/动态阈值策略
数据库·mysql·代码规范
SelectDB14 小时前
时间旅行与快照能力速查:Doris 侧三条落地路径
大数据·数据库·数据分析
SelectDB14 小时前
云数仓成本结构拆解速查:五层计费 vs Doris / 托管形态
大数据·数据库·数据分析
SelectDB14 小时前
什么场景能承接与建议保留:Doris vs Snowflake 边界速查
大数据·数据库·数据分析
这个DBA有点耶17 小时前
DELETE没删多少数据,表却越来越大——InnoDB删除空洞与页合并失效的根因
数据库·mysql·代码规范
ly768920 小时前
PostgreSQL 备份恢复策略:pg_basebackup、WAL 归档与 PITR 在企业 Java 系统中的落地
java·数据库·postgresql·pitr·pg_basebackup·wal 归档
小羊没烦恼!20 小时前
Ajax与JSON的一些总结
android·java·前端·数据库·mysql·算法·okhttp
注塑机数据采集联网20 小时前
如何解决注塑机数据采集联网对接MES系统数据WiFi传输数据不稳问题
大数据·数据库·物联网·数据挖掘·数据分析
黄俊懿21 小时前
【架构师从入门到进阶】第六章:服务集群优化——第八节:线程数公式
java·服务器·数据库·分布式·性能优化·架构·系统架构