MST
星途 面试题库

面试题:缓存设计之Redis内存淘汰策略

在Redis中,常见的内存淘汰策略有哪些?请详细说明每种策略的适用场景,并举例说明在一个用户会话缓存场景中,你会选择哪种策略以及原因。
37.9万 热度难度
后端开发缓存设计

知识考点

AI 面试

面试题答案

一键面试

常见内存淘汰策略

  1. noeviction
    • 适用场景:当应用程序不希望因为内存不足而删除任何数据,宁愿在内存不足时返回错误,适用于不允许数据丢失的场景,如数据库持久化数据的缓存。
    • 举例:在一个金融交易系统中,缓存了一些交易配置信息,这些信息不允许丢失,使用noeviction策略,即使内存不足也不会删除配置,而是返回错误让应用程序处理。
  2. volatile - lru
    • 适用场景:适用于缓存中有设置过期时间的数据,并且希望优先淘汰最近最少使用的具有过期时间的键。常用于一般性的缓存场景,既能保证缓存数据的时效性,又能根据使用频率淘汰不常用数据。
    • 举例:电商系统中,商品的一些临时促销信息缓存,设置了过期时间,使用volatile - lru策略,会优先淘汰长时间未被访问的促销信息缓存。
  3. volatile - ttl
    • 适用场景:适用于希望优先淘汰剩余生存时间(TTL)较短的键的场景。例如,缓存一些时效性非常强的数据,如限时秒杀活动的缓存。
    • 举例:某限时1小时的秒杀活动,缓存了活动相关信息,使用volatile - ttl策略,会优先淘汰剩余时间接近1小时的活动缓存数据。
  4. volatile - random
    • 适用场景:在需要随机淘汰具有过期时间键的场景下使用,例如在一些对数据一致性要求不高,且希望通过随机淘汰来释放内存的场景。
    • 举例:一个简单的广告展示缓存,展示的广告内容经常更新,使用volatile - random策略随机淘汰过期广告缓存数据。
  5. allkeys - lru
    • 适用场景:应用于缓存中所有数据都可能被淘汰的场景,优先淘汰最近最少使用的键。广泛应用于通用的缓存场景,通过淘汰不常用数据来保证缓存空间。
    • 举例:一个内容管理系统的缓存,缓存了文章、图片等各种数据,使用allkeys - lru策略,优先淘汰长时间未被访问的内容缓存。
  6. allkeys - random
    • 适用场景:随机淘汰所有键,适用于对数据淘汰顺序没有特定要求,只是单纯为了释放内存的场景,并且对数据一致性要求不高。
    • 举例:在开发测试环境中,为了快速模拟内存不足情况,可能使用allkeys - random随机淘汰键。

用户会话缓存场景策略选择及原因

在用户会话缓存场景中,建议选择allkeys - lru策略。原因如下:用户会话缓存中的数据通常没有设置明确的过期时间,但随着用户数量的增加和会话的持续,缓存可能会占用大量内存。allkeys - lru策略可以优先淘汰长时间未被使用的用户会话数据,这样能保证活跃用户的会话数据始终在缓存中,提高系统性能。例如,一个在线教育平台,用户登录后会产生会话缓存,使用allkeys - lru策略,能保证经常参与课程学习、互动的用户会话不被淘汰,而淘汰长时间未活跃的用户会话缓存,有效管理内存。