外观
Redis 的持久化机制
RDB
持久化
- 原理:把当前内存中的数据生成快照,并将其保存到磁盘上,形成一个
.rdb
文件。在服务器重启时可通过加载这个快照文件来恢复数据。 - 触发机制
- 手动触发:通过
save
命令或bgsave
命令。save
命令会阻塞 Redis 主线程,直到持久化完成;而bgsave
命令则会在后台异步执行,不会阻塞主线程。 - 自动触发:根据配置文件中的
save
指令,当满足指定的时间间隔和修改次数条件时,自动执行bgsave
命令。
- 手动触发:通过
- 特点
- 性能高效:生成
RDB
文件时会fork
一个子进程处理数据的持久化操作,主进程不会被阻塞,对性能影响较小。 - 数据一致性较弱:是间隔一定时间生成快照,可能会丢失最后一次快照后到系统崩溃期间的数据。
- 适合冷备份:
RDB
文件是一个压缩的二进制文件,文件相对较小,适合做定期备份。 - 恢复速度快:直接加载数据快照,不需要逐条重放写操作,
RDB
文件恢复速度比AOF
快。
- 性能高效:生成
AOF
持久化
- 原理:记录每一次对
Redis
数据库的写命令,把这些操作以追加的方式写入日志文件(.aof
文件)。每次Redis
重启时会从AOF
文件中重放这些命令来恢复数据。 - 同步策略
always
:每次写操作后都同步到磁盘,性能最差但数据安全性最高。everysec
:每秒同步一次,是性能和数据安全性之间的折中。no
:由操作系统决定何时将数据同步到磁盘,性能最高但可能会丢失几秒钟的数据。
- 特点
- 数据一致性高:可以通过配置保证数据的高一致性,能最大限度地保证数据不丢失。
- 文件体积较大:记录每一条写操作,不是数据的快照,
AOF
文件会比RDB
文件大很多。 - 恢复速度较慢:恢复时需要重放所有写操作命令,
AOF
的恢复速度较RDB
慢。 - 日志文件可读:文件记录的都是
Redis
命令,是人类可读的文本,便于调试。
混合持久化
- 原理:
Redis 4.0
开始支持RDB
和AOF
的混合持久化,内存快照以一定频率执行,两次快照之间,再使用AOF
记录这期间的所有命令操作。 - 特点
- 兼顾数据安全性与性能:结合了
RDB
和AOF
的优点,既保证了数据的安全性(通过AOF
实现),又兼顾了性能(通过RDB
的快照恢复速度)。 - 灵活性高:可以根据实际需求调整
RDB
和AOF
的配置参数,以满足不同的业务需求。
- 兼顾数据安全性与性能:结合了