MST
星途 面试题库

面试题:Redis过期键删除策略对性能的影响及调优方法

在高并发读写场景下,Redis的过期键删除策略(如惰性删除和定期删除)会对系统性能产生怎样不同的影响?针对这些影响,你会采取哪些具体的调优方法来保证Redis的高效运行?
25.5万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

过期键删除策略对系统性能的影响

  1. 惰性删除
    • 优点:对CPU友好,只有在读取到过期键时才进行删除操作,不会在键过期时立即占用额外的CPU资源。
    • 缺点:对内存不友好,过期键可能会长时间占用内存,直到被访问才删除,在高并发读写场景下,如果过期键长时间未被访问,可能导致内存持续增长,甚至引发内存不足的问题。
  2. 定期删除
    • 优点:对内存相对友好,通过定期扫描数据库,主动删除过期键,可以有效控制内存的使用,避免过期键长时间占用内存。
    • 缺点:对CPU不友好,定期删除操作会占用一定的CPU时间片,如果扫描频率过高或者每次扫描的键数量过多,可能会影响Redis处理正常读写请求的性能,在高并发场景下可能导致响应延迟增加。

调优方法

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