Redis在4.0版本之后提供了三种持久化方式:RDB持久化、AOF持久化和RDB-AOF混合持久化。
RDB持久化是Redis默认的持久化机制,它将当前进程的数据生成快照并保存到硬盘上,生成的文件以.rdb
结尾。RDB持久化可以通过手动触发(SAVE或BGSAVE命令)或自动触发来执行。它的优点是生成的二进制文件体积小,恢复数据速度快,但缺点是BGSAVE需要执行fork操作创建子进程,不适合频繁执行,因此无法实现实时持久化。
AOF持久化以独立日志的方式记录每次写入的命令,并通过重新执行AOF文件中的命令来恢复数据。AOF持久化相比RDB持久化更安全,因为可以通过配置选项来限制数据丢失的时间窗口。然而,AOF文件存储的是协议文本,体积较大,恢复数据速度较慢,并且AOF重写时会占用大量资源。
RDB-AOF混合持久化模式是Redis 4.0引入的,基于AOF持久化构建而来。通过配置项开启,Redis在执行AOF重写操作时,生成相应的RDB数据并将其写入AOF文件中,然后追加AOF数据。这种方式结合了RDB和AOF的优点,既可以实现快速的数据恢复,又可以限制数据丢失的时间窗口。
此外,RDB手动触发可以通过SAVE和BGSAVE命令执行,其中SAVE会阻塞Redis服务器,而BGSAVE会在子进程中执行,只在fork阶段发生阻塞,因此更常用。Redis还有自动触发RDB的机制,如通过配置选项、从节点复制操作、重新加载Redis等情况。
AOF持久化需要通过配置项来启用,并以文本协议格式记录命令。为了提高写入性能,现代操作系统会将多次写操作优化为一次写操作,但这可能影响AOF持久化的安全性。为了解决这个问题,Redis提供了appendfsync选项来控制AOF文件的同步频率,以确保数据安全。
以上是Redis持久化机制的基本内容,有助于保障数据的持久性和安全性。