Appearance
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优点?
- 紧凑压缩,适合备份
- 恢复快
- fork后台执行,不阻塞主进程
Q: RDB缺点?
- 可能有数据丢失(依赖配置)
- 大数据fork久且内存占用大
- 无法频繁执行
Q: 为什么fork会阻塞?
fork复制进程控制块和页表,如果数据量大,fork可能秒级阻塞。
