MST

星途 面试题库

面试题:Redis过期键删除策略之定期删除场景分析

在Redis中,定期删除策略是如何工作的?请举例说明在缓存业务场景下,定期删除策略是怎样应用以平衡内存占用和CPU消耗的。
20.1万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

Redis定期删除策略工作原理

  1. 随机抽查:Redis并非对所有设置了过期时间的键进行逐一检查是否过期,而是随机从设置了过期时间的键空间中挑选一定数量的键。
  2. 判定删除:对挑选出的键,检查其是否过期,如果过期则删除该键。
  3. 定期执行:这个抽查删除操作是定期执行的,执行周期由配置文件中的hz参数控制,hz表示每秒执行的次数,默认值为10,即每秒执行10次。

缓存业务场景下的应用

  1. 平衡内存占用和CPU消耗
    • 内存占用:如果不进行定期删除,随着时间推移,大量过期的缓存数据会一直占用内存,导致内存占用过高,甚至可能引发内存溢出等问题。定期删除策略能及时清理过期数据,从而控制内存占用。
    • CPU消耗:如果检查频率过高,每次检查的键过多,会大量消耗CPU资源,影响Redis处理其他命令的性能。Redis采用随机抽查少量键的方式,既不会让过期数据长时间占用内存,又不会过度消耗CPU。
  2. 举例: 假设我们有一个电商网站的商品详情缓存业务场景。每个商品的详情在缓存中设置了1小时的过期时间。
    • 设置缓存
import redis

r = redis.Redis(host='localhost', port=6379, db = 0)
product_id = "12345"
product_detail = "商品详细信息"
r.setex(product_id, 3600, product_detail)  # 设置商品详情缓存,过期时间3600秒(1小时)
  • 定期删除过程:Redis后台每秒会按照hz(默认10次)的频率,从所有设置了过期时间的键(包括我们这个商品详情键)中随机抽取一部分键进行检查。如果抽到了这个商品详情键且它已过期,就会将其删除。这样既不会因为一直保留过期的商品详情缓存而占用过多内存,也不会因为频繁检查所有键而大量消耗CPU,实现了内存占用和CPU消耗的平衡。