回答
Redis 提供了两种主要的持久化机制:RDB
和AOF
。这两种机制可以单独使用,也可以同时使用。
RDB 持久化
RDB
(Redis Database),会在指定的时间间隔内生成 Redis 数据的快照,并保存到磁盘上的一个二进制文件中(默认为 dump.rdb
)。这个过程可以通过 Redis 配置文件中的 "save" 指令来设置,例如 "save 60 10000" 表示每当 60 秒内有超过 10000 次写操作时,Redis 就会自动触发一次快照保存。
RDB
的优点是恢复速度快,因为直接读取单个文件就可以恢复整个数据集。但它的缺点是在两次快照之间如果发生故障,那么这段时间内的数据就会丢失。
AOF 持久化
AOF
(Append Only File),会记录下所有对 Redis 服务器进行写操作的命令,并追加到 AOF
文件的末尾。AOF 文件是一个只追加的日志文件,Redis 启动时通过回放这些命令来重建数据状态。
AOF 持久化提供了三种不同的同步频率配置:
always
:每次写入都同步。提供了最高的数据安全性,但也可能因为每次写操作都需要进行磁盘同步而影响性能。everysec
:每秒同步一次,默认设置。既提供了较好的性能又不会丢失太多的数据。no
:由操作系统决定何时同步。依赖于操作系统,可能会在系统崩溃时丢失更多的数据。
随着 AOF
文件的不断增长,为了减少磁盘空间的占用和加快恢复速度,Redis 提供了 AOF
重写的功能,该功能可以创建一个新的 AOF
文件,其中只包含恢复当前数据状态所需的最小命令集。
混合持久化
RDB
适用于需要快速备份和恢复大规模数据集的场景,但可以接受少量数据丢失的情况。AOF
适用于对数据安全性要求较高的场景,但需要注意的是,高频率的磁盘同步可能会影响性能。
Redis 的混合持久化是在 Redis 4.0 版本中引入的一项新的持久化机制,它结合了 RDB
和 AOF
两种持久化策略的优点,以达到既能保证数据安全,又能在服务器重启后快速恢复数据的目的。
详解
Reds 是内存数据库,所有数据都存储在内存中,为了防止 Redis 进程退出而导致数据丢失,我们需要定期将 Redis 内存中的数据保存到磁盘上,这样 Redis 在重启后就可以恢复数据,确保数据的持久性。
同时,为了进行灾备,我们还可以将持久化文件拷贝到一个远程位置。
Redis 目前提供了两种持久化机制:
RDB
(Redis Data Base):内存快照AOF
(Append Only File) :增量日志
RDB 持久化
RDB
持久化指的是在指定的时间间隔内将内存中的数据集快照写入磁盘中,它是内存快照的方式持久化,每次都是从 Redis 中生成一个快照进行数据的全量备份。
其工作原理是:当 RDB
持久化触发时,Redis 会 fork 一个子进程,子进程会将快照数据写入一个临时 RDB
文件中。在这个过程中,父进程依然可以继续处理客户端请求,从而最小化持久化操作对服务性能的影响。一旦子进程完成数据的写入,它会用这个新的 RDB
文件替换掉旧的 RDB
文件,以确保数据的一致性和完整性。
RDB触发时机
EBD 触发时机分为手动触发和自动触发两种。
手动触发
当通过手动执行 SAVE
或 BGSAVE
命令时,会触发 RDB 持久化。
SAVE
命令会阻塞当前Redis服务器直到RDB文件创建完成。由于整个过程都会阻塞 Redis 服务器,所以在线上是绝对不允许使用 SAVE
来触发 RDB 持久化的。