返回

闪电百科,Redis RDB 持久化时,依然对外提供数据读写服务

后端

Redis RDB 持久化时,还能对外提供数据读写服务吗?

答: 是的,Redis 在执行 RDB 持久化时,依然可以对外提供数据读写服务,不会出现任何暂停或中断的情况,保证了 Redis 的高可用性。

RDB 持久化原理

RDB 持久化,即 Redis Database,是 Redis 最早的持久化方式,也被称为快照持久化。它以数据集在某个时间点的快照形式,将数据从内存导出到硬盘,保存成一个二进制文件。

RDB 持久化的触发时机,可以手动触发,也可以通过配置 RDB 持久化策略来实现。RDB 持久化策略提供了多种选项,包括:

  • save m n:在满足以下条件时触发 RDB 持久化:
    • 在 m 秒内,数据集至少发生 n 次修改。
  • save 900 1:在 900 秒内,数据集至少发生 1 次修改。
  • save 300 10:在 300 秒内,数据集至少发生 10 次修改。

当触发 RDB 持久化时,Redis 会将数据集的快照保存在一个二进制文件中,该文件的名称为 dump.rdb,默认保存在 Redis 数据目录下。

AOF 持久化原理

AOF 持久化,即 Append-Only File,是 Redis 2.4 版本之后引入的一种持久化方式。它以追加的方式将所有写操作记录到一个日志文件中,该日志文件称为 AOF 文件。

AOF 持久化的触发时机,可以手动触发,也可以通过配置 AOF 持久化策略来实现。AOF 持久化策略提供了多种选项,包括:

  • always:每次写操作都会立即追加到 AOF 文件中。
  • everysec:每隔 1 秒将 AOF 文件的内容刷新到磁盘。
  • no:不启用 AOF 持久化。

当触发 AOF 持久化时,Redis 会将写操作追加到 AOF 文件的末尾。AOF 文件默认保存在 Redis 数据目录下,名称为 appendonly.aof。

两者的优缺点

RDB 和 AOF 都是 Redis 的持久化方式,但它们各有优缺点。

RDB 的优点:

  • 速度快:RDB 持久化速度很快,因为它只需要将数据集在某个时间点的快照导出到硬盘,不需要记录所有的写操作。
  • 占用空间小:RDB 持久化生成的文件比较小,因为它只包含数据集在某个时间点的快照。

RDB 的缺点:

  • 数据可能丢失:如果在 RDB 持久化过程中发生系统故障,那么从上次 RDB 持久化到现在的数据都会丢失。
  • 不支持增量更新:RDB 持久化不支持增量更新,每次都需要对整个数据集进行快照。

AOF 的优点:

  • 数据安全性高:AOF 持久化的数据安全性很高,因为它会记录所有的写操作,即使在系统故障的情况下,也可以通过 AOF 文件来恢复数据。
  • 支持增量更新:AOF 持久化支持增量更新,只需要将最近的写操作追加到 AOF 文件中即可。

AOF 的缺点:

  • 速度慢:AOF 持久化速度比较慢,因为它需要记录所有的写操作。
  • 占用空间大:AOF 持久化生成的文件比较大,因为它需要记录所有的写操作。

Redis 持久化设置

在 Redis 的配置文件中,可以对 RDB 持久化和 AOF 持久化进行设置。

# RDB 持久化配置
save 900 1
save 300 10
save 60 10000

# AOF 持久化配置
appendonly yes
appendfsync always

内存和磁盘如何协同服务?

在 Redis 中,内存和磁盘是协同工作的,以便提供高效的数据读写服务。

  • 当客户端向 Redis 写入数据时,数据会首先写入内存中的缓冲区。
  • 当缓冲区满了,或者满足了 RDB 或 AOF 持久化策略的条件时,Redis 会将数据持久化到磁盘。
  • 当客户端从 Redis 读取数据时,Redis 会先从内存中读取数据。
  • 如果数据不在内存中,Redis 会从磁盘中加载数据到内存中,然后再返回给客户端。

这种内存和磁盘协同工作的方式,可以保证 Redis 既有很高的读写性能,又能够保证数据的持久性。

总结

Redis 在执行 RDB 持久化时,依然可以对外提供数据读写服务,不会出现任何暂停或中断的情况。RDB 持久化和 AOF 持久化各有优缺点,可以根据不同的需求选择合适的持久化方式。内存和磁盘协同工作,可以保证 Redis 既有很高的读写性能,又能够保证数据的持久性。