Redis持久化
Redis的持久化原理主要有两种方式:RDB(快照)持久化和AOF(日志)持久化。两者均可独立使用,也可同时使用,以满足不同场景下的持久化需。
RDB(快照)持久化¶
RDB持久化是通过定期对Redis内存中的数据生成快照(Snapshot)并且保存在磁盘中的方式实现的。
原理¶
- Redis通过fork()创建一个子进程。
- 子进程对内存中的数据进行快照,并将快照数据写入一个临时文件。
- 当子进程完成快照过程后,将旧的RDB文件替换为新生成的快照文件。
触发方式¶
- 定时触发:根据配置文件中的save选项设定的规则定时执行(如save 900 1表示900秒内有1次写入操作时触发)。
- 手动触发:通过执行SAVE或BGSAVE命令。
优缺点¶
优点:¶
- RDB文件是一个紧凑的单文件,方便备份和传输。
- 恢复数据时,读取快照文件即可,性能较好。
缺点:¶
- 无法做到实时或准实时持久化,可能会出现数据丢失。
AOF(日志)持久化¶
AOF持久化是通过记录Redis对内存数据的每次修改操作,并将这些操作写入一个日志文件的方式实现的。
原理¶
- Redis将每个写入命令追加到AOF缓冲区。
- 根据配置的同步策略(appendfsync选项),将AOF缓冲区的数据同步到磁盘。
同步策略有以下几种:¶
- always:每次写入命令都同步到磁盘,较安全但性能较差。
- everysec:每秒同步一次,折中方案。
- no:完全由操作系统控制同步时机,性能最好但安全性较差。
触发方式¶
AOF持久化默认关闭,可以通过配置文件中的appendonly选项启用。
优缺点¶
优点:¶
- 可以实时或准实时持久化,数据可靠性较高。
- AOF文件可读性较好,方便排查问题。
缺点:¶
- AOF文件体积较大,恢复数据时可能性能较差。
RDB与AOF的选择¶
- 如果数据可靠性要求较高,建议使用AOF持久化。
- 如果对性能和备份要求较高,可以同时使用RDB和AOF持久化,以兼顾数据可靠性和性能要求。