Redis 中键过期以后,系统采用了哪些删除策略来清理这些失效数据?
考察说明
考查对 Redis 过期键删除机制的理解,包括主动删除和惰性删除的配合。
回答思路
- 【回答框架 1】Redis 对过期的键采用两种删除策略:惰性删除和定期删除。惰性删除是在每次访问键时检查是否过期,若过期则删除并返回空;定期删除是每隔一段时间随机抽取部分已过期键进行删除。
- 【回答框架 2】惰性删除的优点是节省 CPU,只在实际访问时才处理,但缺点是如果过期键一直不被访问,会持续占用内存。定期删除则通过周期性扫描来缓解这个问题,但无法保证所有过期键都能及时删除。
- 【回答框架 3】两种策略结合使用,兼顾了 CPU 和内存的平衡。在内存压力较大时,Redis 还会通过内存淘汰策略来进一步处理,但这与过期删除不完全相同。
- 【回答框架 4】当过期键被删除时,Redis 会向所有订阅了过期事件的客户端发送通知,但只有开启 notify-keyspace-events 才能收到。
- 【回答框架 5】对于 AOF 和 RDB 持久化,过期键的处理也有差异,比如 RDB 加载时已经过期的键会被忽略,AOF 重写时也会过滤过期键。
- 【关键点 1】惰性删除在访问时触发,定期删除由服务器周期执行。
- 【关键点 2】定期删除采用随机抽样,并非全量扫描。
- 【关键点 3】两者结合是默认的过期删除机制。
- 【关键点 4】内存淘汰策略(如 LRU、LFU)与过期删除是不同机制。
- 【关键点 5】删除过期键时会向订阅者发送事件通知。
- 【易错点 1】不要认为定期删除会立刻删除所有过期键,它只是抽样删除。
- 【易错点 2】不要混淆内存淘汰策略和过期删除策略,前者是内存不足时触发的。
- 【易错点 3】不能依赖过期事件来保证业务逻辑准确完成,因为事件可能延迟或丢失。