Redis默认使用内存存储数据,重启后内存数据丢失的主要原因是未开启持久化机制。解决办法是选择RDB或AOF持久化方案:RDB定期快照全量备份,适合大数据量恢复快;AOF记录每条写命令,数据更完整但恢复慢。推荐混合使用:开启AOF + RDB,配置save 900 1、save 300 10、save 60 10000,appendonly yes,确保重启零丢失。示例配置:
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfsync everysec
原因一:未开启持久化
Redis是内存数据库,重启服务器或进程崩溃时,内存中的所有数据都会丢失。如果没有配置RDB或AOF持久化,数据无法恢复。这是数据丢失最常见原因。
原因二:RDB快照策略不合理
RDB通过save命令生成快照,默认策略是900秒内1次变化、300秒10次、60秒10000次。如果流量小,长时间不触发快照,重启丢失最近数据。建议调整save参数或开启AOF。
AOF持久化详解
AOF持久化将每条写命令追加到AOF文件中,重启时重放命令恢复数据。策略有always、everysec、no三种,推荐everysec,每秒fsync一次,平衡性能和安全。配置appendonly yes,appendfsync everysec。
RDB vs AOF
RDB是压缩快照,fork子进程生成,恢复快但可能丢数据;AOF文件大但数据实时,适合高可靠性场景。最佳实践:AOF做主持久化,RDB定期备份,auto-aof-rewrite开启自动重写。
混合持久化开启
Redis 4.0后支持混合持久化,RDB重写AOF前半部分增量用RDB,后半AOF,文件小恢复快。配置aof-use-rdb-preamble yes。重启命令:redis-cli shutdown save,强制持久化。
故障恢复步骤
1. 检查AOF文件完整性:redis-check-aof fix;2. 重命名旧AOF备份;3. 重启Redis加载AOF;4. 监控日志确认数据量。预防:主从复制,哨兵高可用。
FAQ
Q: Redis重启丢数据怎么快速恢复?
A: 优先用AOF重放命令,redis-cli --bigkeys检查大key。
Q: RDB和AOF哪个更好?
A: 混合用,AOF主RDB备。
Q: 怎么避免fork阻塞?
A: 开启no-appendfsync-on-rewrite yes。
Q: 数据丢失后怎么查日志?
A: loglevel warning,grep "Fatal" redis.log。