MST

星途 面试题库

面试题:Redis缓存失效策略有哪些及应用场景

请简述Redis常见的缓存失效策略,如定时删除、惰性删除、定期删除,并举例说明在实际项目中,针对不同的数据类型或业务场景,你会如何选择合适的缓存失效策略。
38.5万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

1. 定时删除

  • 原理:在设置键值对的过期时间时,同时创建一个定时器,当过期时间到达时,由定时器立即执行对该键值对的删除操作。
  • 优点:能即时释放过期键所占用的内存,内存利用率高。
  • 缺点:大量键同时设置过期时间时,会产生较多定时器,增加CPU负载。
  • 举例:在秒杀活动场景中,活动一旦结束,相关的秒杀商品缓存数据就应立即删除,以避免占用内存,可采用定时删除策略。在Redis中可通过setex key seconds value设置键值对及过期时间,系统后台会开启定时器在seconds时间后删除该键值对。

2. 惰性删除

  • 原理:键值对过期后,并不立即删除,而是在该键被再次访问时,检查是否过期。若过期,则删除该键,并返回空值;若未过期,则正常返回值。
  • 优点:不会额外消耗CPU资源去专门处理过期键的删除,只有在访问时才进行处理,对CPU友好。
  • 缺点:过期键可能会长时间占用内存,直到被访问才删除,若大量过期键未被访问,会导致内存浪费。
  • 举例:在用户信息缓存场景中,用户信息不常变化且访问频率不高,若用户信息缓存过期,可在下次用户查询时采用惰性删除,检查并删除过期缓存,重新从数据库加载最新数据。在代码中,如使用Java Jedis客户端获取缓存值时,Jedis内部会在获取操作时检查键是否过期,若过期则删除。

3. 定期删除

  • 原理:Redis定期随机从数据库中取出一定数量的键,检查这些键是否过期,若过期则删除。
  • 优点:通过定期抽查的方式,能在一定程度上控制过期键占用内存的时间,同时对CPU的影响相对定时删除较小。
  • 缺点:无法保证所有过期键都能及时被删除,可能仍有过期键长时间占用内存。
  • 举例:对于新闻资讯类应用的缓存,新闻资讯数据在一段时间后时效性降低,但访问频率相对较高,可采用定期删除策略。在Redis配置文件中,通过hz参数控制定期删除的执行频率,默认每秒执行10次,每次随机抽取一些键进行过期检查和删除。

4. 选择策略

  • 数据类型
    • 字符串类型:若存储的是时效性强的数据,如限时活动信息,可采用定时删除;若为一般性不常变化且偶尔访问的数据,如一些配置信息,可采用惰性删除;若数据量较大且有一定时效性要求,定期删除也是不错选择。
    • 哈希类型:例如存储用户详细资料的哈希结构,若对内存要求高且用户资料更新频率低,可定时删除;若访问频率高且对内存容忍度稍高,可惰性删除;若哈希数据量较大,定期删除更合适。
  • 业务场景
    • 高频低价值数据:如网站访问统计的临时数据,采用定期删除,定期清理过期统计数据,减少内存占用,同时不会因频繁删除影响性能。
    • 低频高价值数据:如重要的配置文件缓存,采用惰性删除,在保证内存不会长期被占用的同时,减少对CPU的额外开销。
    • 强时效性数据:如限时抢购的商品库存缓存,必须采用定时删除,确保活动结束后,缓存数据立即删除,避免影响业务逻辑。