Skip to content

RDB持久化

概述

RDB(Redis Database)是Redis的数据快照,将内存数据序列化到磁盘。

触发方式

自动触发

redis
# 配置
save 900 1      # 1个key变化,900秒后保存
save 300 10     # 10个key变化,300秒后保存
save 60 10000   # 10000个key变化,60秒后保存

# 停机保存
SHUTDOWN SAVE

手动触发

redis
BGSAVE     # 后台异步保存
SAVE       # 同步保存(阻塞)

实现原理

bgsave流程

1. 主进程fork子进程
2. 子进程执行bgsave
3. 遍历内存写入RDB
4. 完成后通知主进程

fork问题

c
// fork时复制页表,不复制数据
// 写时复制(COW)机制
// fork会阻塞主进程(Linux下通常很快)

面试考点

Q: RDB优点?

  1. 紧凑压缩,适合备份
  2. 恢复快
  3. fork后台执行,不阻塞主进程

Q: RDB缺点?

  1. 可能有数据丢失(依赖配置)
  2. 大数据fork久且内存占用大
  3. 无法频繁执行

Q: 为什么fork会阻塞?

fork复制进程控制块和页表,如果数据量大,fork可能秒级阻塞。

最后更新: