RDB和AOF的写回策略分别是什么?
典型回答 ✅Redis的持久化机制是怎样的? 写回策略是指将数据从内存写入到持久化存储(如磁盘)的方式和时机。在Redis中,不同的持久化机制有着不同的写回策略。 RDB的写回策略 在 Redis 中,RDB 的写回策略主要包括以下几个方面: 定期触发 Redis通过配置文件中 save 参数定义了 RDB 的自动保存条件。以下是默认配置的示例: 1 2 3 save 900 1 # 如果900秒内至少有1个键发生变化,则保存快照 save 300 10 # 如果300秒内至少有10个键发生变化,则保存快照 save 60 10000 # 如果60秒内至少有10000个键发生变化,则保存快照 策略: Redis会定期检查这些条件,如果满足,触发 RDB 的保存操作。 条件可以通过修改 redis.conf 文件自定义,也可以通过命令动态设置,例如: 1 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了。 “每秒写回"是在二者之间折中了一下,异步的每秒把数据写会到磁盘上,最大程度的提升效率和降低风险。