Docker Redis何时将数据存储到卷?Redis备份时机咨询
Docker Redis 数据写入与备份时机说明
一、是否每条命令都将数据存储至卷中?
不是,这全看Redis的持久化配置——Docker只是把Redis的数据目录挂载到卷里,和原生Redis的逻辑完全一样:
- 默认Redis开启RDB持久化,这是快照式写入,不会每条命令都即时写到卷里,只有满足触发条件时,才会生成全量数据快照(.rdb文件)保存到卷中。
- 如果开启AOF持久化,根据
appendfsync的配置不同,有三种写入策略:appendfsync always:每条命令执行后立刻同步写入卷中的AOF文件,性能最差但数据最安全。appendfsync everysec:每秒把缓冲区里的命令同步到卷中,是默认推荐的平衡方案。appendfsync no:完全交给操作系统处理刷盘,不会主动同步,数据丢失风险最高。
总结:只有开启AOF且设为always时,每条命令才会即时写入卷;其他配置下,都是批量或按条件写入。
二、Redis备份触发时机
Redis的备份主要和RDB快照、AOF重写两个机制相关:
RDB快照触发时机
- 自动触发:符合配置文件里
save指令的规则,比如默认的:save 900 1:900秒内至少1个键被修改save 300 10:300秒内至少10个键被修改save 60 10000:60秒内至少10000个键被修改
满足任一条件就会自动生成RDB快照到卷中。
- 手动触发:执行
SAVE(阻塞Redis进程直到快照做完)或BGSAVE(后台异步生成快照)命令。 - 其他场景:Redis正常关闭(执行
SHUTDOWN命令)时会强制生成RDB快照;主从架构里,从节点第一次连接主节点时,主节点会触发BGSAVE生成快照同步给从节点。
AOF重写触发时机
AOF文件会不断追加命令,体积越来越大,Redis会通过重写生成精简版的AOF文件(相当于重新执行所有有效命令生成新的AOF):
- 自动触发:同时满足两个条件:
- 当前AOF文件大小比上次重写后的大小超出
auto-aof-rewrite-percentage配置的比例(默认100%,也就是翻倍) - 当前AOF文件大小至少达到
auto-aof-rewrite-min-size配置的最小值(默认64MB)
- 当前AOF文件大小比上次重写后的大小超出
- 手动触发:执行
BGREWRITEAOF命令,后台异步完成AOF重写。
内容的提问来源于stack exchange,提问作者gyeom
相关产品推荐
相关产品推荐

