面试题答案
一键面试过期键删除策略对系统性能的影响
- 惰性删除
- 优点:对CPU友好,只有在读取到过期键时才进行删除操作,不会在键过期时立即占用额外的CPU资源。
- 缺点:对内存不友好,过期键可能会长时间占用内存,直到被访问才删除,在高并发读写场景下,如果过期键长时间未被访问,可能导致内存持续增长,甚至引发内存不足的问题。
- 定期删除
- 优点:对内存相对友好,通过定期扫描数据库,主动删除过期键,可以有效控制内存的使用,避免过期键长时间占用内存。
- 缺点:对CPU不友好,定期删除操作会占用一定的CPU时间片,如果扫描频率过高或者每次扫描的键数量过多,可能会影响Redis处理正常读写请求的性能,在高并发场景下可能导致响应延迟增加。
调优方法
- 调整定期删除策略
- 频率调整:通过配置
hz
参数来调整定期删除的频率。hz
表示Redis每秒执行的定时任务次数,默认值是10,即每秒执行10次定期删除任务。如果内存压力较大,可以适当增加hz
值,如调整为20或50,增加过期键的扫描频率,但要注意不要设置过高导致CPU占用过高。如果CPU压力较大,可以适当降低hz
值。 - 扫描范围控制:Redis在每次定期删除任务中,会随机抽取一定数量的数据库进行扫描,每次扫描的键数量也有限制。可以通过修改相关代码(如果有能力修改Redis源码)或者等待Redis官方改进来优化每次扫描的键数量和范围,以平衡CPU和内存的使用。
- 频率调整:通过配置
- 结合其他策略
- 内存淘汰策略:合理配置Redis的内存淘汰策略,如
volatile - lru
(在设置了过期时间的键中,使用LRU算法淘汰键)、allkeys - lru
(在所有键中使用LRU算法淘汰键)等。当内存达到一定阈值时,Redis会根据配置的淘汰策略主动淘汰部分键,避免因为过期键未及时删除导致内存溢出。 - 主动删除:在业务逻辑中,对于一些明确不再使用的键,可以主动调用
DEL
命令进行删除,减少过期键对内存的占用,同时也避免惰性删除可能带来的延迟。
- 内存淘汰策略:合理配置Redis的内存淘汰策略,如
- 监控与优化
- 监控指标:使用Redis自带的监控工具(如
INFO
命令)以及外部监控工具(如Prometheus + Grafana)来监控Redis的内存使用情况(used_memory
等指标)、CPU使用率(used_cpu_sys
、used_cpu_user
等指标)以及过期键的数量(expired_keys
指标)等。通过实时监控这些指标,可以及时发现系统性能问题。 - 动态调整:根据监控数据,动态调整过期键删除策略和其他相关配置。例如,如果发现内存增长过快但CPU使用率较低,可以适当增加定期删除的频率;如果CPU使用率过高且内存压力不大,可以适当降低定期删除频率并结合内存淘汰策略来优化系统性能。
- 监控指标:使用Redis自带的监控工具(如