RDB 快照
RDB(Redis Database Backup)将内存数据快照保存到磁盘。触发方式
配置参数
RDB 原理
- fork 时只复制页表,不复制数据
- 主进程写入时,复制修改的页
优缺点
| 优点 | 缺点 |
|---|---|
| 文件紧凑,恢复快 | 两次备份间可能丢失数据 |
| fork 子进程,不阻塞 | fork 大数据集可能较慢 |
| 适合备份和灾难恢复 | 无法实时持久化 |
AOF 日志
AOF(Append Only File)记录每个写命令。开启 AOF
同步策略
| 策略 | 性能 | 数据安全 |
|---|---|---|
| always | 低 | 最高,几乎不丢数据 |
| everysec | 中 | 最多丢失 1 秒数据 |
| no | 高 | 可能丢失较多数据 |
AOF 重写
AOF 文件会越来越大,重写可以压缩文件。- fork 子进程
- 子进程遍历内存数据,生成新 AOF
- 主进程的新命令写入重写缓冲区
- 子进程完成后,缓冲区命令追加到新 AOF
- 替换旧 AOF 文件
Redis 7.0+ 多文件 AOF
优缺点
| 优点 | 缺点 |
|---|---|
| 数据安全性高 | 文件比 RDB 大 |
| 可读性好 | 恢复比 RDB 慢 |
| 支持重写压缩 | 写入性能略低于 RDB |
混合持久化
Redis 4.0+ 支持 RDB + AOF 混合持久化。- AOF 重写时,先以 RDB 格式写入内存快照
- 再追加增量 AOF 命令
- 恢复时先加载 RDB,再执行 AOF
- RDB 恢复速度 + AOF 数据安全
如何选择
| 场景 | 推荐方案 |
|---|---|
| 允许分钟级丢失 | RDB |
| 允许秒级丢失 | AOF everysec |
| 不允许丢失 | AOF always(性能较差) |
| 生产环境 | 混合持久化(推荐) |
| 纯缓存 | 关闭持久化 |