在 docker 中部署 redis 并启用 rdb 与 aof 双重持久化,核心是用自定义 redis.conf 控制行为、挂载数据卷确保文件落盘、明确启动参数避免冲突;两者可共存,重启时优先加载更完整的 aof,rdb 作为备份兜底。

在 Docker 中部署 Redis 并启用 RDB 与 AOF 双重持久化,核心是:**用自定义 redis.conf 控制行为、挂载数据卷确保文件落盘、明确启动参数避免冲突**。两者可共存,但重启时优先加载 AOF(更完整),RDB 仍作为备份和快速恢复兜底。
准备配置文件 redis.conf
创建本地 redis.conf(如 /home/redis/conf/redis.conf),关键配置项需显式开启并协调:
-
RDB 部分:取消注释或添加 save 规则,例如:
save 3600 1save 300 10save 60 10000
同时指定文件名和路径:dbfilename dump.rdbdir /data -
AOF 部分:必须开启:
appendonly yesappendfilename "appendonly.aof"
推荐同步策略(兼顾安全与性能):appendfsync everysec -
其他必要项:
daemonize no(Docker 不允许守护进程)protected-mode no(若容器内网互通,否则设为 yes + bind)stop-writes-on-bgsave-error no(避免快照失败阻塞写入)
挂载数据卷并运行容器
确保 RDB 和 AOF 文件都写入宿主机持久化目录,命令示例:
docker run -d \ --name my-redis \ --restart=always \ -p 6379:6379 \ -v /home/redis/conf/redis.conf:/etc/redis/redis.conf \ -v /home/redis/data:/data \ -v /home/redis/logs:/var/log/redis \ redis:7.2 \ redis-server /etc/redis/redis.conf
说明:
-
/home/redis/data同时承载 RDB(dump.rdb)和 AOF(appendonly.aof)文件 - 不要在命令行重复加
--appendonly yes或--save,这些应由 conf 统一管理,避免覆盖 - 镜像建议用官方
redis:7.2或更高版本(AOF 默认使用 MP-AOF 格式,更健壮)
验证双重持久化是否生效
进入容器检查运行时配置和文件生成情况:
docker exec -it my-redis redis-cli CONFIG GET save<br> docker exec -it my-redis redis-cli CONFIG GET appendonly<br> ls -l /home/redis/data/
预期输出:
-
CONFIG GET save返回你配置的三条规则 -
CONFIG GET appendonly返回["appendonly","yes"] -
/home/redis/data/下应存在dump.rdb和appendonly.aof两个文件(首次启动后稍等几十秒即生成)
注意事项与常见问题
双重持久化不是简单叠加,需注意逻辑关系:
- Redis 启动时,如果 AOF 文件存在且完整,会**忽略 RDB**,只加载 AOF;只有 AOF 被禁用或损坏时才 fallback 到 RDB
- AOF 重写(
auto-aof-rewrite-percentage 100+auto-aof-rewrite-min-size 64mb)默认启用,无需额外配置 - 不要手动执行
SAVE(阻塞主线程),日常依赖BGSAVE或配置的自动触发 - 生产环境建议对
/home/redis/data做定期备份,并监控磁盘空间——AOF 文件持续增长,尤其写密集场景











