1. Redis持久化机制概述
Redis作为内存数据库的典型代表,其数据默认存储在内存中。这种设计带来了极高的读写性能,但也意味着一旦服务重启或服务器宕机,所有数据都将丢失。为了解决这个问题,Redis提供了两种主要的持久化机制:AOF(Append Only File)和RDB(Redis Database)。这两种机制各有特点,适用于不同的业务场景。
在实际生产环境中,我们通常会根据业务需求和数据重要性级别,选择单独使用某种持久化方式,或者组合使用两种方式。理解这两种持久化机制的工作原理、配置方式以及适用场景,对于构建可靠的Redis服务至关重要。
重要提示:即使启用了持久化机制,也不能保证100%的数据不丢失。持久化策略的选择需要在性能和数据安全性之间找到平衡点。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. RDB持久化深度解析
2.1 RDB工作原理
RDB是Redis默认的持久化方式,它通过创建数据集的快照(snapshot)来实现持久化。当触发RDB持久化时,Redis会fork出一个子进程,这个子进程负责将内存中的数据写入到一个临时RDB文件中。写入完成后,会用这个临时文件替换旧的RDB文件。
RDB文件是一个经过压缩的二进制文件,它保存了Redis在某个时间点的完整数据状态。这种文件格式非常紧凑,且加载速度极快,这使得RDB非常适合用于数据备份和灾难恢复。
2.2 RDB触发方式
Redis提供了多种触发RDB持久化的方式:
-
手动触发:通过执行SAVE或BGSAVE命令
- SAVE:阻塞Redis服务器进程,直到RDB文件创建完毕
- BGSAVE:派生一个子进程来创建RDB文件,主进程继续处理命令
-
自动触发:通过配置文件设置保存条件
code复制save 900 1 # 900秒内至少有1个key被修改 save 300 10 # 300秒内至少有10个key被修改 save 60 10000 # 60秒内至少有10000个key被修改 -
其他触发情况:
- 执行FLUSHALL命令时(如果配置了自动保存)
- 主从复制时,从节点全量同步会触发主节点的BGSAVE
- 执行SHUTDOWN命令且没有开启
