*Redis BGSAVE 命令
后台执行 RDB 快照保存。通过 fork 子进程完成,不阻塞主线程。
*语法
BGSAVE [SCHEDULE]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| SCHEDULE | 标志 | 否 | 如果正在执行 AOF 重写,则调度保存(Redis 3.2+) |
*返回值
| 条件 | 返回值 |
|---|---|
| 后台保存启动 | Background saving started |
| 已有一个 BGSAVE 在执行 | Background saving already in progress |
*时间复杂度
O(N),N 为 key 数量。但主线程不阻塞,只有 fork 瞬间有短暂阻塞。
*示例
> BGSAVE
Background saving started
> LASTSAVE
(integer) 1717000000
*常见错误
- fork 失败:内存不足或操作系统限制导致 fork 失败。
*最佳实践
- 定期备份:配置
save规则自动触发 BGSAVE,或定时任务手动触发。 - 持久化策略:RDB + AOF 同时开启,RDB 用于快速恢复,AOF 用于数据完整性。
*FAQ
Q: BGSAVE 会阻塞 Redis 吗? A: fork 瞬间有微秒级阻塞,但总体不阻塞主线程。子进程负责写 RDB 文件。
Q: BGSAVE 和 AOF 重写可以同时执行吗? A: 可以,但 Redis 会调度避免同时执行大量 I/O。