MST

星途 面试题库

面试题:Redis过期键删除策略在高并发场景下如何保证内存与性能的平衡?

假设在一个高并发读写的Redis应用场景中,大量键设置了过期时间。请说明Redis的过期键删除策略(惰性删除和定期删除)如何协同工作,以保证内存使用的合理性和系统的高性能,并且分析在这种场景下可能会遇到的挑战及应对方法。
49.6万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

Redis过期键删除策略协同工作

  1. 惰性删除:当客户端访问一个已过期的键时,Redis会检查该键是否过期。如果过期,Redis会立即删除该键,并返回相应的结果(如 nil)。这种策略的优点是只有在访问过期键时才进行删除操作,不会对正常的键访问造成额外的性能开销。但缺点是如果过期键长时间未被访问,会一直占用内存。
  2. 定期删除:Redis会周期性地随机抽取一定数量的键进行检查,并删除其中过期的键。Redis通过配置 hz 参数来控制每秒执行定期删除的频率,默认值为10,即每秒执行10次。定期删除策略弥补了惰性删除的不足,主动清理过期键,避免过期键长时间占用内存。

保证内存使用合理性和系统高性能的原理

  1. 内存使用合理性:惰性删除确保在访问过期键时及时释放内存,定期删除则周期性地清理未被访问的过期键,两者结合能有效避免过期键长期占用内存,保证内存使用的合理性。
  2. 系统高性能:惰性删除避免了对正常键访问的额外开销,而定期删除通过控制执行频率(hz 参数),在不过度消耗CPU资源的前提下清理过期键,维持系统的高性能。

可能遇到的挑战及应对方法

  1. 内存峰值问题
    • 挑战:在高并发读写场景下,大量键同时过期,可能导致内存峰值瞬间升高,即使定期删除和惰性删除在工作,但在短时间内过期键占用的内存可能无法及时释放,影响系统性能甚至导致内存不足。
    • 应对方法:可以通过合理设置键的过期时间,避免大量键在同一时间过期。例如,将过期时间分散在一个时间段内,而不是集中设置。另外,可以适当调整定期删除的频率(增大 hz 值),但要注意这可能会增加CPU的负载。
  2. CPU负载问题
    • 挑战:如果定期删除频率过高(hz 值过大),会占用过多的CPU资源,影响Redis处理其他请求的性能;反之,如果频率过低,又可能导致过期键清理不及时,内存占用过高。
    • 应对方法:通过监控系统的CPU和内存使用情况,进行性能测试,找到一个合适的 hz 值,平衡CPU负载和过期键清理效率。同时,可以考虑在系统负载较低的时间段适当增加定期删除的频率。
  3. 数据一致性问题
    • 挑战:由于惰性删除是在访问时才删除过期键,在过期后到访问前这段时间内,数据可能处于不一致状态。例如,在一个读多写少的场景中,过期键可能长时间未被访问,导致其他依赖该键数据的操作获取到过期数据。
    • 应对方法:可以在业务层面增加一些校验逻辑,对于关键数据,在使用前先检查其有效性,或者通过发布 - 订阅机制,当键过期时发布通知,让相关业务逻辑及时处理。