1.介绍
落盘持久化是指将数据从内存保存到硬盘(或其他非易失性存储介质)上,以便在程序退出、系统重启或断电后仍然能够恢复数据的一种机制。
在 Redis 中,持久化是为了避免因为 Redis 是内存数据库而导致的数据易失性问题。通过将内存中的数据定期或实时写入磁盘,可以实现数据的长期保存和恢复。
2.RDB
RDB(Redis DataBase)快照是一种基于快照的持久化机制,主要特点如下:
-
原理: Redis 会在某些时间点(如定时或满足某种条件时)将内存中的所有数据生成一个二进制快照文件(通常是
dump.rdb
),存储到磁盘。 -
优点:
- 快照文件紧凑且占用磁盘空间小,适合数据备份和迁移。
- 写入磁盘的过程对 Redis 性能的影响较小,因为快照生成是异步完成的。
-
缺点:
- 在快照之间的数据无法保存,可能丢失最后一次快照后的数据(例如发生宕机时)。
-
触发条件:
- 手动触发:通过命令
SAVE
(同步阻塞) 或BGSAVE
(异步)生成快照。 - 自动触发:根据配置文件中的条件(
save <seconds> <changes>
)触发快照。
- 手动触发:通过命令
3.AOF
AOF(Append Only File)是一种基于日志的持久化机制,主要特点如下:
-
原理: Redis 会将每个写操作记录到一个日志文件(通常是
appendonly.aof
)。这些日志文件按顺序记录操作,Redis 重启时可以通过重放这些日志恢复数据。 -
优点:
- 数据丢失的风险低,可以通过配置实时写入日志。
- 可选压缩功能,减少日志文件体积。
-
缺点:
- AOF 文件通常比 RDB 文件大。
- 在高写入压力下,实时记录操作可能对性能造成一定影响。
-
同步策略: AOF 提供三种同步策略(通过
appendfsync
配置):always
:每次写操作都同步到磁盘,最安全但性能较低。everysec
:每秒同步一次,兼顾安全和性能(默认)。no
:完全由操作系统控制同步时机,性能最高但数据安全性较低。