Redis 过期策略详解
时间:2026-10-9 07:11 作者:emer 分类: 无
Redis 过期策略详解
Redis 设置了过期时间后,怎么删除过期的 key?这就涉及过期策略。
1. 设置过期时间
# 设置过期时间(秒)
set name "张三" ex 60
# 给已有key设置过期时间
expire name 60
# 查看剩余时间
ttl name
# 移除过期时间
persist name
2. 两种过期策略
1)惰性删除
- 等到访问这个 key 的时候才检查是否过期
- 过期了就删除,返回 nil
- 优点:对 CPU 友好
- 缺点:对内存不友好,很多过期 key 没被访问就占着内存
2)定期删除
- 每隔一段时间,随机检查一些 key
- 发现过期的就删除
- 优点:定期清理,控制内存
- 缺点:随机抽查可能漏
Redis 实际是两种策略结合用。
3. 内存淘汰策略
当内存满了,写入新数据时怎么办?
# 查看当前淘汰策略
config get maxmemory-policy
常用淘汰策略:
- noeviction: 不淘汰,写入报错(默认)
- allkeys-lru: 所有 key 中淘汰最久没用的
- allkeys-random: 所有 key 中随机淘汰
- volatile-lru: 只在设置了过期时间的 key 中淘汰最久没用的
- volatile-random: 只在设置了过期时间的 key 中随机淘汰
- volatile-ttl: 淘汰即将过期的 key
生产推荐:allkeys-lru
4. LRU 和 LFU
- LRU(最近最少使用): 淘汰最久没访问的
- LFU(最不经常使用): 淘汰访问次数最少的
Redis 4.0 开始支持 LFU。
5. 实际使用建议
-
设置合理的 maxmemory
- 不要让 Redis 把内存占满
- 一般设为服务器内存的 70%
-
选择合适的淘汰策略
- 纯缓存场景:allkeys-lru
- 有持久化数据:volatile-lru
-
key 一定要设过期时间
- 重要数据不要设过期
- 缓存数据都要设过期时间
-
监控内存使用
- 用 info memory 查看
- 关注 used_memory 指标
6. 查看内存信息
# 查看内存使用
info memory
# 查看key数量
dbsize
# 查看大key
--bigkeys
总结
Redis 过期策略要点:
- 惰性删除:访问时才删
- 定期删除:定期抽查清理
- 两种策略结合使用
- 内存满了要配置淘汰策略
- 生产推荐 allkeys-lru
- 缓存数据都要设过期时间
- 监控内存使用情况
搞懂过期策略,Redis 用起来才不踩坑。