✅RDB和AOF的写回策略分别是什么?
典型回答
写回策略是指将数据从内存写入到持久化存储(如磁盘)的方式和时机。在Redis中,不同的持久化机制有着不同的写回策略。
RDB的写回策略
在 Redis 中,RDB 的写回策略主要包括以下几个方面:
定期触发
Redis通过配置文件中 save 参数定义了 RDB 的自动保存条件。以下是默认配置的示例:
save 900 1 # 如果900秒内至少有1个键发生变化,则保存快照
save 300 10 # 如果300秒内至少有10个键发生变化,则保存快照
save 60 10000 # 如果60秒内至少有10000个键发生变化,则保存快照策略:
- Redis会定期检查这些条件,如果满足,触发 RDB 的保存操作。
- 条件可以通过修改
redis.conf文件自定义,也可以通过命令动态设置,例如:
CONFIG SET save "300 10 60 10000"手动触发
在Redis中,我们可以通过以下命令手动生成 RDB 文件:
- SAVE:会阻塞 Redis 服务器,直到快照完成。
- BGSAVE:在后台异步生成 RDB 文件,不会阻塞 Redis。
SAVE 操作直接在主线程完成,不适合生产环境。BGSAVE 会 fork 一个子进程生成快照,更高效,但需要一定的系统资源(如内存和CPU)。
AOF的写回策略
AOF有三种数据写回策略,分别是Always,Everysec和No。
- Always,同步写回:每个写命令执行完,立马同步地将日志写回磁盘;
- Everysec,每秒写回:每个写命令执行完,只是先把日志写到AOF文件的内存缓冲区,每隔一秒把缓冲区中的内容写入磁盘;
- No,操作系统控制的写回:每个写命令执行完,只是先把日志写到AOF文件的内存缓冲区,由操作系统决定何时将缓冲区内容写回磁盘。
“同步写回”可靠性肯定是最高的,但是它在每一个写命令后都有一个落盘操作,而且还是同步的,这和直接写磁盘类型的数据库有啥区别?
“操作系统控制的写回"这种是最不靠谱的,谁知道操作系统啥时候帮你做持久化,万一没来及持久化就宕机了,不就gg了。
“每秒写回"是在二者之间折中了一下,异步的每秒把数据写会到磁盘上,最大程度的提升效率和降低风险。