跳转至

Redis持久化

Redis的持久化原理主要有两种方式:RDB(快照)持久化和AOF(日志)持久化。两者均可独立使用,也可同时使用,以满足不同场景下的持久化需。

RDB(快照)持久化

RDB持久化是通过定期对Redis内存中的数据生成快照(Snapshot)并且保存在磁盘中的方式实现的。

原理

  1. Redis通过fork()创建一个子进程。
  2. 子进程对内存中的数据进行快照,并将快照数据写入一个临时文件。
  3. 当子进程完成快照过程后,将旧的RDB文件替换为新生成的快照文件。

触发方式

  1. 定时触发:根据配置文件中的save选项设定的规则定时执行(如save 900 1表示900秒内有1次写入操作时触发)。
  2. 手动触发:通过执行SAVE或BGSAVE命令。

优缺点

优点:
  • RDB文件是一个紧凑的单文件,方便备份和传输。
  • 恢复数据时,读取快照文件即可,性能较好。
缺点:
  • 无法做到实时或准实时持久化,可能会出现数据丢失。

AOF(日志)持久化

AOF持久化是通过记录Redis对内存数据的每次修改操作,并将这些操作写入一个日志文件的方式实现的。

原理

  1. Redis将每个写入命令追加到AOF缓冲区。
  2. 根据配置的同步策略(appendfsync选项),将AOF缓冲区的数据同步到磁盘。

同步策略有以下几种:

  • always:每次写入命令都同步到磁盘,较安全但性能较差。
  • everysec:每秒同步一次,折中方案。
  • no:完全由操作系统控制同步时机,性能最好但安全性较差。

触发方式

AOF持久化默认关闭,可以通过配置文件中的appendonly选项启用。

优缺点

优点:
  • 可以实时或准实时持久化,数据可靠性较高。
  • AOF文件可读性较好,方便排查问题。
缺点:
  • AOF文件体积较大,恢复数据时可能性能较差。

RDB与AOF的选择

  • 如果数据可靠性要求较高,建议使用AOF持久化。
  • 如果对性能和备份要求较高,可以同时使用RDB和AOF持久化,以兼顾数据可靠性和性能要求。