Redis持久化机制的核心是RDB快照和AOF日志两种方式。RDB通过定时将内存数据快照保存到磁盘上的RDB文件,实现数据备份和恢复;AOF则记录每条写命令到日志文件,故障恢复时重放命令重建数据。实战中,推荐混合使用:开启RDB进行定期备份,AOF确保高可靠性,同时配置AOF重写减少文件体积。配置示例:save 900 1 和 appendonly yes。
RDB持久化详解
RDB(Redis DataBase)是Redis的快照持久化方式,它会将内存中的数据集以二进制格式保存到磁盘上的RDB文件。RDB文件紧凑且体积小,适合用于备份和灾难恢复。触发RDB保存的条件有手动SAVE/BGSAVE命令、配置save参数如save 60 1000,以及master-slave复制时的自动触发。优点:恢复速度快、对性能影响小;缺点:可能丢失最后一次快照后的数据。
AOF持久化机制
AOF(Append Only File)持久化记录所有写操作命令到AOF文件,文件以Redis命令格式存储,便于阅读和修复。配置appendonly yes,同步策略有always、everysec、no三种,everysec是推荐设置,平衡性能和数据安全。AOF文件会随时间变大,可通过BGREWRITEAOF命令重写优化体积。恢复时直接重放AOF文件命令。
持久化实战配置
在redis.conf中配置:save 900 1 save 300 10 save 60 10000,设置多个条件满足其一即触发RDB。AOF部分:appendonly yes appendfsync everysec auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb。混合使用时,关闭AOF的no-appendfsync-on-rewrite yes,避免fork时阻塞。监控日志确认持久化状态。
故障恢复与高可用
Redis重启时优先加载AOF文件(若开启),否则加载RDB。实战中结合Sentinel或Cluster实现高可用,持久化确保单节点数据不丢。测试恢复:kill -9 redis,重启观察日志加载时间和数据完整性。注意大内存RDB fork耗时长,可调高overcommit_memory 1优化。
性能优化技巧
生产环境RDB策略:调整save参数减少频率,使用BGSAVE后台保存。AOF重写阈值设为100%,最小64MB触发。禁用THP(Transparent Huge Pages)避免内存碎片:echo never > /sys/kernel/mm/transparent_hugepage/enabled。监控info persistence查看rdb_changes_since_last_save和aof_current_size。
常见问题与FAQ
Q: RDB和AOF哪个更好?
A: 混合使用最佳,RDB用于备份,AOF保证最小数据丢失。
Q: AOF文件太大怎么办?
A: 配置auto-aof-rewrite-percentage 100和auto-aof-rewrite-min-size 64mb,定期BGREWRITEAOF。
Q: 持久化对性能影响多大?
A: RDB fork瞬间耗时,AOF everysec策略下fsync每秒一次,影响小。
Q: 如何验证持久化有效?
A: 用redis-cli的info persistence查看统计,或手动kill测试恢复。