Redis的持久化机制主要依赖于两种方法:RDB(Redis Database)和AOF(Append Only File)。这两种机制可以单独使用,也可以同时使用,以提高数据的持久性和可靠性。
RDB(Redis Database)
-  工作原理: - RDB通过创建数据集的快照来进行持久化。
- 快照创建可以在指定的时间间隔内自动完成,也可以手动触发。
- 当快照创建时,Redis会执行一个fork操作,创建一个子进程。
- 子进程将当前内存中的数据写入到临时RDB文件中。
- 写入完成后,这个临时RDB文件替换掉旧的RDB文件。
- 在这个过程中,主进程可以继续处理客户端请求。
 
-  优点: - 快照占用的空间较小,因为它只是某个时间点的数据副本。
- 恢复数据时速度较快。
 
-  缺点: - 如果Redis崩溃,自上次快照以来的所有更改都会丢失。
 
- 在大型数据库上创建快照可能会导致性能问题。
AOF(Append Only File)
-  工作原理: - AOF通过记录对数据库进行的所有写操作来实现持久化。
- 每个写操作都会被追加到AOF文件的末尾。
- Redis支持不同的AOF重写策略,如每次写入后、每秒写入或者从不写入。
- 随着操作的增多,AOF文件的大小会不断增长,因此Redis提供了AOF重写的功能,这可以压缩AOF文件的大小。
 
-  优点: - 提供了更好的持久性保证,因为每个写操作都被记录下来了。
- 即使在极端条件下,比如系统崩溃或断电,最多也就丢失一秒的数据(取决于AOF的配置)。
 
-  缺点: - AOF文件通常比RDB文件大。
- 在高负载下,AOF可能会降低Redis的性能。
 
结合使用RDB和AOF
- 在实际应用中,通常建议同时使用RDB和AOF,以结合两者的优点。
- 可以配置Redis在特定条件下进行RDB快照,同时持续地将操作记录到AOF文件中。
- 在数据恢复时,Redis会先读取AOF文件,因为它更完整地记录了所有写操作。
这样配置后,可以获得RDB的快速恢复能力和AOF的高可靠性。
关键配置项
RDB配置
-  触发快照的条件: - save <seconds> <changes>:当满足“在指定的秒数内有多少次更改”时,自动创建快照。
- 例如:  bashCopy code save 900 1 # 在900秒内如果至少有1个key被更改,则触发快照 save 300 10 # 在300秒内如果至少有10个keys被更改,则触发快照 save 60 10000 # 在60秒内如果至少有10000个keys被更改,则触发快照
 
-  快照文件的位置: - dbfilename <filename>:指定RDB文件的名称。
- dir <dir>:指定RDB文件的存储目录。
 
AOF配置
-  启用AOF持久化: - appendonly yes:启用AOF持久化机制。
 
-  AOF文件的写入策略: - appendfsync always:每次写入都同步到磁盘(最安全,但性能最低)。
- appendfsync everysec:每秒同步一次到磁盘(推荐,性能和安全性平衡)。
- appendfsync no:由操作系统决定何时同步到磁盘(最快,但最不安全)。
 
-  AOF文件的位置: - appendfilename "<filename>":指定AOF文件的名称。
 
-  AOF重写配置: - auto-aof-rewrite-percentage <percentage>:当AOF文件增长达到设置的百分比时触发重写。
- auto-aof-rewrite-min-size <size>:设置触发重写的AOF文件最小大小。
 
# RDB配置
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
dir /var/lib/redis# AOF配置
appendonly yes
appendfsync everysec
appendfilename "appendonly.aof"
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
注意事项
- 配置文件的路径通常在启动Redis服务时指定。默认情况下,它可能位于/etc/redis/redis.conf。
- 修改配置文件后,需要重启Redis服务,或者通过CONFIG REWRITE命令在线重载配置。
- 确保你的磁盘空间足够存储RDB和AOF文件,特别是当数据库很大时。
- 在生产环境中,适当调整这些设置以达到最佳的性能和数据安全平衡。