✅RDB和AOF的写回策略分别是什么?

✅RDB和AOF的写回策略分别是什么?

典型回答

✅Redis的持久化机制是怎样的?

写回策略是指将数据从内存写入到持久化存储(如磁盘)的方式和时机。在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了。

“每秒写回"是在二者之间折中了一下,异步的每秒把数据写会到磁盘上,最大程度的提升效率和降低风险。