Redis 的持久化

Redis 的持久化
最新回答
超级无敌掌门狗

2026-10-24 00:24:27

Redis 的持久化

Redis 是内存数据库,为了保障数据的安全性,Redis 提供了两种持久化策略:RDB(Redis DataBase)和 AOF(Append Only File)。

一、RDB 策略

RDB 是 Redis 默认的持久化方案。在指定时间间隔内,Redis 服务已执行了指定次数的写操作后,就会自动触发一次持久化操作,将内存中的数据快照保存到磁盘上。这个快照文件是一个二进制文件,包含了 Redis 在某个时间点上的所有数据,通常命名为 dump.rdb。

  • RDB 原理:

    Redis 会复制一个与当前进程一样的子进程,新进程的所有数据(变量、环境变量、程序计数器等)数值都和原进程一致。

    主进程在持久化过程中不进行任何 IO 操作,确保了极高的性能。

  • RDB 保存的文件:

    RDB 保存的文件是 dump.rdb,位置保存在 Redis 的启动目录。每次同步数据到磁盘都会生成一个新的 dump.rdb 文件,覆盖旧的 dump.rdb 文件。

  • 配置 RDB 持久化策略:

    在 redis.conf 的快照配置中,可以配置 RDB 保存的策略,如 save 900 1 表示 900 秒内至少有 1 个键被改变时触发快照。

  • RDB 数据恢复:

    通过将 dump.rdb 文件备份并在 Redis 启动前替换到相应目录,Redis 启动时会加载 dump.rdb 文件,恢复数据。

  • RDB 小结:

    优点:数据恢复速度快,适合大规模的数据恢复。

    缺点:如果系统崩溃,最后一次快照之后的数据会丢失。

二、AOF 策略

AOF 策略是为了弥补 RDB 的不足(数据的不一致性)而出现的,它采用日志的形式来记录每个写操作,并追加到文件中。Redis 重启会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。

  • AOF 原理:

    Redis 以日志的形式记录每个写操作,只许追加文件但不可以改写文件。

    Redis 启动时会读取 AOF 文件,重新构建数据。

  • AOF 保存的文件:

    AOF 保存的文件是 appendonly.aof,位置也保存在 Redis 的启动目录。

  • 配置 AOF 持久化策略:

    在 redis.conf 的 APPEND ONLY MODE 配置模块中,可以配置 AOF 保存策略,如 appendfsync everysec 表示每秒异步记录一次。

  • AOF 数据恢复:

    通过将 appendonly.aof 文件备份并在 Redis 启动前替换到相应目录,Redis 启动时会根据日志文件的内容恢复数据。

    如果 AOF 文件格式异常,可以使用 redis-check-aof --fix appendonly.aof 命令进行修复。

  • AOF 的重写:

    AOF 采用文件追加方式,文件会越来越大。为避免这种情况,Redis 提供了重写机制,当 AOF 文件的大小超过所设定的阈值时,会启动 AOF 文件的内容压缩,只保留可以恢复数据的最小指令集。

  • AOF 小结:

    优点:数据可靠性高,因为每个写操作都被记录下来了。

    缺点:日志文件比快照文件更大,恢复数据的速度比较慢。

三、应该选用 RDB 策略还是 AOF 策略?

  • 若只打算用 Redis 做缓存,可以关闭持久化。
  • 若打算使用 Redis 的持久化,建议 RDB 和 AOF 都开启。RDB 更适合做数据的备份,AOF 提供了更高的数据完整性保障。如果 AOF 可用,Redis 启动时将自动加载 AOF。

四、Redis 持久化的配置

RDB 策略的配置:

  • save <seconds> <changes>:配置复合的快照触发条件。
  • stop-writes-on-bgsave-error:当 bgsave 快照操作出错时是否停止写数据到磁盘。
  • rdbcompression:是否对存储到磁盘中的快照进行压缩。
  • rdbchecksum:是否使用 CRC64 算法进行数据校验。
  • dbfilename:Redis 持久化数据生成的文件名。
  • dir:Redis 持久化数据生成文件保存的目录。

AOF 策略的配置:

  • appendonly:是否开启 AOF。
  • appendfilename:AOF 保存文件名。
  • appendfsync:AOF 异步持久化策略。
  • no-appendfsync-on-rewrite:重写时是否可以运用 appendsync。
  • auto-aof-rewrite-percentage:设置重写的基准百分比。
  • auto-aof-rewrite-min-size:设置重写的基准值。

通过合理配置 RDB 和 AOF 策略,可以确保 Redis 数据的安全性和可靠性。