Redis是一个内存数据库,为了保证数据在服务器重启后不会丢失,Redis提供了持久化机制。Redis支持三种主要的持久化方式:RDB、AOF和混合持久化。每种方式都有其特点和适用场景。

RDB持久化

RDB(Redis Database)是Redis默认的持久化方式。它通过创建数据集的时间点快照来工作。

特点:

  • 紧凑的单一文件,适合备份
  • 灾难恢复能力强
  • 适合大规模数据的恢复
  • 子进程进行备份,对性能影响小

配置:

在redis.conf中设置:

save 900 1
save 300 10
save 60 10000

这表示900秒内有1个键被修改,300秒内有10个键被修改,或60秒内有10000个键被修改时,触发一次保存。

AOF持久化

AOF(Append Only File)记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来重建数据集。

特点:

  • 更好的持久性(可以配置每秒同步)
  • 基于日志,易于理解和恢复
  • 在误操作时可以快速恢复

配置:

在redis.conf中设置:

appendonly yes
appendfsync everysec

appendfsync可选值:

  • always:每个写命令都同步(最安全,最慢)
  • everysec:每秒同步一次(折中方案)
  • no:由操作系统决定何时同步(最快,但最不安全)

混合持久化

从Redis 4.0开始,Redis支持RDB和AOF的混合持久化模式。

特点:

  • 结合了RDB的快速加载和AOF的数据安全性
  • 在恢复时,先加载RDB的数据,再应用AOF日志

配置:

在redis.conf中设置:

aof-use-rdb-preamble yes

混合持久化模式在Redis重启时,可以先加载RDB文件,然后再重放AOF文件中的增量命令,这样既保证了恢复速度,又尽可能保证了数据的完整性。

选择合适的持久化方式取决于你的具体需求。如果能承受一定程度的数据丢失,可以选择RDB;如果要求高可用性且能承受更多的磁盘IO,可以选择AOF;如果想兼顾恢复速度和数据安全,可以选择混合持久化。