Redis重启后数据有效期(TTL)的处理依赖于持久化机制:RDB快照会完整保存key及其TTL,重启恢复时有效期继续生效;AOF日志记录SETEX等带过期命令,重启时会精确重放TTL,但可能因后台删除而有细微差异。关键策略是开启RDB或AOF持久化,并配置合理的保存策略(如save 60 1000),混合使用RDB+AOF确保数据安全,重启时优先加载AOF恢复完整性。
来源1
在Redis中,键的生存时间(TTL)在RDB持久化时会被完整保存,包括键的过期时间戳。重启Redis后,恢复RDB文件时,这些键会保留原来的TTL,继续按原时间过期。如果使用AOF,AOF会记录SETEX、PEXPIRE等设置过期时间的命令,重放时TTL会精确恢复。
来源2
Redis重启后数据丢失问题通常是因为没有开启持久化。RDB是内存快照,保存时包含TTL,重启加载RDB后key的过期时间继续从快照时刻计算。AOF是命令日志,记录了所有写操作包括过期设置,重启时会重放AOF恢复数据和TTL,但如果有太多过期键,恢复时间可能较长。
来源3
关键策略:1. 开启RDB,配置bgsave周期,如save 900 1;2. 开启AOF,fsync策略everysec;3. 混合模式,Redis重启优先加载AOF,再定期RDB压缩。TTL处理上,RDB直接恢复时间戳,AOF通过命令重放。对于大数据量,建议用RDB快速恢复骨架,再AOF补全。
来源4
注意:Redis懒惰删除+定时删除机制,重启后恢复的键TTL有效,但如果内存压力大,可能会提前被驱逐。持久化恢复时,过期键不会立即删除,而是等下次惰性访问或定时扫描。
来源5
实际配置示例:appendonly yes,appendfsync everysec;dbfilename dump.rdb,重启后用redis-check-aof fix修复AOF。TTL在重启后保持,因为它是键的属性,随数据持久化。
来源6
如果只用内存不持久化,重启全丢包括TTL。策略是至少RDB,每5分钟全量备份,AOF增量日志。恢复顺序:停止Redis,rm旧AOF,BGREWRITEAOF生成新AOF,重启加载。
FAQ
Q: Redis重启数据全丢怎么解决?
A: 开启RDB或AOF持久化,重启自动加载。
Q: RDB和AOF哪个对TTL更准确?
A: AOF更精确,重放命令;RDB直接时间戳,都可靠。
Q: 重启后TTL从零开始吗?
A: 不是,继续原有效期。
Q: 怎么查看恢复状态?
A: 用INFO persistence看rdb_last_save_time和aof_current_size。