结论:Redis键的过期时间通过EXPIRE、PEXPIRE、SETEX等命令设置,如EXPIRE key seconds设置秒级过期,SET key value EX seconds原子设置带过期;优化内存策略包括惰性删除+定期删除,避免内存溢出,结合TTL检查键生存时间,主动DEL无用键;实际教程:1.设置过期SET user:1 "data" EX 3600;2.查看剩余时间TTL key;3.持久化时用EXPIREAT指定过期时间戳。最佳实践:热点数据设长TTL,冷数据短TTL,监控INFO stats的evicted_keys指标调整策略。
来源1
Redis的键过期时间设置有几种方式: 1. EXPIRE key seconds:设置键的过期时间,单位为秒。 2. PEXPIRE key milliseconds:设置键的过期时间,单位为毫秒。 3. EXPIREAT key timestamp:设置键的过期时间戳,单位为秒级时间戳。 4. PEXPIREAT key milliseconds-timestamp:设置键的过期时间戳,单位为毫秒级时间戳。 5. SET key value EX seconds:设置键的同时设置过期时间,单位为秒。 6. SET key value PX milliseconds:设置键的同时设置过期时间,单位为毫秒。
来源2
Redis内存优化之键过期策略 Redis 提供了键的过期时间设置,通过设置键的过期时间,当键过期后,Redis 会自动删除该键,从而释放内存空间。 Redis 删除过期键有两种方式: 1、定时删除: Redis 默认每隔 100ms 随机抽取 expired 数据库中 20 个键,检查是否过期,如果过期就删除。
来源3
惰性删除:只有在访问键时,才会对数据进行过期检查。这样减少了删除操作对 CPU 的影响。 定期删除:Redis 默认每隔 100ms 就随机提取一些 key 执行删除检查操作。定期删除和惰性删除相结合,就能很好的删除大部分过期 key了。
来源4
为了优化内存管理,建议: - 对临时数据设置较短的过期时间,比如验证码、session等。 - 热点数据设置较长的过期时间。 - 定期清理无用键,使用 SCAN 命令遍历并删除。
来源5
查看键的生存时间: TTL key :查看键的剩余生存时间,单位秒,返回 -1 表示没有设置过期时间,返回 -2 表示键不存在。 PTTL key:毫秒级剩余时间。 取消过期时间:PERSIST key。
来源6
在实际项目中,结合内存使用率监控,当内存达到阈值时,主动设置更短的过期时间或使用内存淘汰策略如allkeys-lru。
FAQ
Q: Redis如何自动删除过期键?
A: 通过惰性删除(访问时检查)和定期删除(每100ms随机检查20个键)结合实现。
Q: 设置过期时间会影响性能吗?
A: 轻微影响,主要在删除阶段,合理设置可优化内存。
Q: 如何批量设置过期时间?
A: 使用Pipeline或Lua脚本循环EXPIRE命令。
Q: 过期键在AOF/RDB中如何处理?
A: 持久化时不保存已过期键,恢复后重新计算。