【redis使用场景——缓存——数据过期策略 】
redis使用场景——缓存——数据过期策略
- 定期删除(Active Expiration)
- 1. 快速模式(Fast Expiration Cycle)
- 工作流程:
- 特点:
- 优点:
- 2. 慢速模式(Slow Expiration Cycle)
- 工作流程:
- 特点:
- 优点:
- 惰性删除(Lazy Expiration)
- 特点:
- redis的过期删除策略
定期删除(Active Expiration)
Redis 会定期(默认每秒 10 次)随机抽取一些设置了过期时间的 key,检查它们是否过期,如果过期就删除。
1. 快速模式(Fast Expiration Cycle)
工作流程:
-
Redis 每次事件循环(event loop)都会执行快速过期检查
-
从设置了过期时间的键中随机抽取 20 个进行检查
-
删除其中已过期的键
-
如果发现超过 25% 的键已过期,则立即再抽取 20 个进行检查(循环直到低于 25%)
特点:
-
执行频率高(每秒执行多次)
-
每次检查的键数量少
-
执行时间短(不超过 1ms)
-
主要处理即将过期的键
优点:
- 对系统性能影响小
- 能及时清理大部分过期键
2. 慢速模式(Slow Expiration Cycle)
工作流程:
- 按数据库逐个检查(Redis 默认有 16 个数据库)
- 从过期字典(expires字典)中随机抽取键进行检查
- 默认每次扫描 20 个键
- 如果发现超过 25% 的键已过期,则继续扫描
- 每次慢速模式的总执行时间不超过 hz 配置的 25%(默认 hz=10,即 25ms)
特点:
- 执行频率低(默认每秒 1 次)
- 每次检查的键数量多
- 执行时间较长(可配置,默认不超过 25ms)
- 全面扫描所有过期键
优点:
- 能清理更多过期键
- 防止大量键堆积过期
惰性删除(Lazy Expiration)
当客户端尝试访问一个 key 时,Redis 会先检查该 key 是否设置了过期时间,如果已过期则立即删除并返回空。
特点:
只有在访问时才会检查过期
,对不常访问的 key,即使过期也可能长时间占用内存
redis的过期删除策略
惰性删除+定期删除
两种策略进行配合使用