Redis 提供了两种主要的持久化机制,用于在内存数据丢失或重启时恢复数据:RDB(快照)和 AOF(追加文件)。这两种机制可以单独使用,也可以组合使用,以达到更好的数据安全性和性能。
1. RDB (Redis Database Backup)
RDB 是 Redis 的一种基于时间的持久化方式,它会定期将内存中的数据快照保存到磁盘上。
工作原理:
- Redis 会根据配置的规则,定期生成数据的快照。
- 当满足特定条件(如在指定时间内发生了一定数量的写操作),Redis 会创建一个 RDB 文件,将当前内存中的所有键值对序列化并写入该文件。
持久化流程:
- Redis 进程接收到保存快照的命令(
SAVE或BGSAVE)。 - 如果是
SAVE命令,Redis 会阻塞当前请求并同步保存;如果是BGSAVE,它会在后台异步进行。 - 在后台子进程中,Redis 会复制父进程的数据,并将其序列化为 RDB 格式。
- 完成后,RDB 文件被保存在配置指定的位置,通常以
.rdb为后缀。
2. AOF (Append Only File)
AOF 是另一种持久化方式,它通过记录所有对数据库执行的写命令来实现持久化。这意味着每当有新的写操作发生时,该操作都会被追加到 AOF 文件中。
工作原理:
- 每个写命令都会被记录到 AOF 文件,当 Redis 重启时,可以通过重新执行这些命令来恢复数据。
- AOF 的写入策略可以灵活配置,如每次写入后立即同步、每秒同步一次等。
持久化流程:
- 客户端发送写命令到 Redis 服务器。
- Redis 执行该命令并将对应的操作追加到 AOF 文件中。
- 根据设置,如果采用“每秒同步”的策略,则在每秒钟结束时会将缓冲区内容刷新到磁盘;如果是“立即同步”,则在每次操作后立即刷新。
3. RDB 与 AOF 的比较
| 特性 | RDB | AOF |
|---|---|---|
| 数据一致性 | 快照,不一定最新 | 始终是最新的数据状态 |
| 恢复速度 | 快速 | 较慢 |
| 压缩 | 支持压缩 | 不支持 |
| 效率 | 写入效率高 | 写入性能相对较低 |
| 可读性 | 二进制格式 | 文本格式 |
4. 同时使用 RDB 和 AOF
Redis 支持同时开启 RDB 和 AOF,这样可以结合二者优点,提高系统的可用性和数据安全性。在这种情况下:
- 可以利用 RDB 快速恢复系统,而使用 AOF 保证尽量不丢失近期的数据变更。
总结
Redis 提供了灵活且高效的数据持久化方案,可以根据实际应用场景选择合适的方法。了解这两种持久化机制及其工作流程,有助于设计出可靠且高性能的数据存储解决方案。
内容由零声教学AI助手提供,问题来源于学员提问




