Redis 的 RDB 和 AOF 是服务端机制,Hyperf 仅连接使用,无法干预;持久化需配置 redis.conf 并重启 Redis;Hyperf 可校验与主动触发持久化,但备份须额外实现。

RDB 和 AOF 不是 Hyperf 实现的,而是 Redis 服务端自身的机制;Hyperf 只负责连接和使用 Redis,无法干预其持久化行为。 你改的是 redis.conf,不是 Hyperf 的配置文件。
Redis 启动前必须配好 save 和 appendonly
Hyperf 应用启动时,Redis 实例早已运行。持久化开关、触发条件、文件路径等全由 Redis 进程加载 redis.conf 时决定:
-
save 60 10000控制 RDB 快照频率,注释掉所有save行 = 关闭自动 RDB -
appendonly yes才启用 AOF,仅改 Hyperf 的redis.default.host不起作用 -
dir /var/lib/redis决定dump.rdb和appendonly.aof存在哪,Hyperf 无权覆盖 - 修改后必须重启 Redis 进程(
systemctl restart redis或redis-server /path/to/redis.conf)
Hyperf 能做的只有验证与兜底
你可以在 Hyperf 启动时检查 Redis 是否按预期开启了持久化,避免误配导致数据裸奔:
- 用
Redis::command('CONFIG GET save')拿到当前生效的save规则 - 用
Redis::command('CONFIG GET appendonly')确认返回"yes" - 执行
Redis::command('BGREWRITEAOF')主动触发 AOF 重写(仅当 AOF 已启用) - 定期调用
Redis::command('BGSAVE')强制生成一次 RDB 快照(不阻塞,但会 fork 子进程)
注意:BGSAVE 成功不代表文件已落盘——要等 INFO persistence 中的 rdb_bgsave_in_progress 变为 0 才算完成。
备份策略不能只靠 Redis 自身
Redis 的 RDB/AOF 是恢复手段,不是备份方案。生产环境必须额外做三件事:
- 用
crontab定期cp /var/lib/redis/dump.rdb /backup/redis_$(date +\%F).rdb,并加时间戳校验 - AOF 文件需配合
redis-check-aof --fix做损坏检测,不能直接 rsync - Hyperf 可封装一个命令行任务(如
php bin/hyperf.php redis:backup),自动拉取 RDB + 记录redis-cli INFO server元信息 + 上传至 OSS/S3
关键点:RDB 文件本身不包含主从偏移、复制 ID 等元数据,单靠它恢复可能引发从库同步错乱;务必保留 redis-cli INFO replication 输出快照。
最容易被忽略的是:混合持久化(aof-use-rdb-preamble yes)在 Redis 4.0+ 默认关闭,但开启后 AOF 开头是 RDB 格式二进制,结尾才是追加命令——这种文件既不能用 redis-check-dump 也不能用 redis-check-aof 单独校验,必须用 redis-server --test-memory 类似方式验证可加载性。


















