Redis的持久化方式主要有两种:RDB(Redis Database Backup file,即Redis数据备份文件)和AOF(Append Only File,即追加文件)。此外,从Redis 4.0版本开始,还引入了混合持久化方式。
1. RDB持久化
RDB持久化方式是通过快照的方式将某个时刻的内存数据以二进制的形式写入磁盘。这种方式的优点是效率高,因为是二进制写入,所以文件体积相对较小,适合大规模的数据恢复,且对数据恢复的完整性要求不高时使用。然而,RDB的缺点是可能会丢失最后一次快照之后的所有修改数据,因为它是在指定的时间间隔内进行快照的。
RDB持久化可以通过手动执行SAVE或BGSAVE命令来触发,也可以通过修改配置文件redis.conf中的save选项来设置自动快照的条件。例如,可以设置为“save 900 1”表示900秒内至少有1个key发生改变时自动执行BGSAVE命令。
2. AOF持久化
AOF持久化方式是通过记录所有的操作命令,并以文本的形式追加到文件中来实现数据的持久化。这种方式的优点是保证了数据的完整性,因为所有的操作命令都被记录,即使Redis意外终止,也可以通过重新执行这些命令来恢复数据。然而,AOF的缺点是文件体积较大,因为记录的是命令而不是实际的数据,而且如果命令执行频繁,文件可能会迅速增长。
AOF持久化可以通过修改配置文件redis.conf中的appendonly选项来开启,并可以通过appendfsync选项来设置持久化策略,如always、everysec和no等。
3. 混合持久化
Redis 4.0版本之后新增的持久化方式,它结合了RDB和AOF的优点。在写入的时候,先把当前数据以RDB形式写入文件的开头,然后再将后续的操作命令以AOF的格式存入文件。这样既能保证Redis重启时的速度(RDB文件加载比AOF快),又能降低数据丢失的风险(后续的操作命令也被记录了下来)。
混合持久化可以通过修改配置文件redis.conf中的aof-use-rdb-preamble选项来开启。