面试题答案
一键面试常见内存淘汰策略
- noeviction
- 适用场景:当应用程序不希望因为内存不足而删除任何数据,宁愿在内存不足时返回错误,适用于不允许数据丢失的场景,如数据库持久化数据的缓存。
- 举例:在一个金融交易系统中,缓存了一些交易配置信息,这些信息不允许丢失,使用
noeviction
策略,即使内存不足也不会删除配置,而是返回错误让应用程序处理。
- volatile - lru
- 适用场景:适用于缓存中有设置过期时间的数据,并且希望优先淘汰最近最少使用的具有过期时间的键。常用于一般性的缓存场景,既能保证缓存数据的时效性,又能根据使用频率淘汰不常用数据。
- 举例:电商系统中,商品的一些临时促销信息缓存,设置了过期时间,使用
volatile - lru
策略,会优先淘汰长时间未被访问的促销信息缓存。
- volatile - ttl
- 适用场景:适用于希望优先淘汰剩余生存时间(TTL)较短的键的场景。例如,缓存一些时效性非常强的数据,如限时秒杀活动的缓存。
- 举例:某限时1小时的秒杀活动,缓存了活动相关信息,使用
volatile - ttl
策略,会优先淘汰剩余时间接近1小时的活动缓存数据。
- volatile - random
- 适用场景:在需要随机淘汰具有过期时间键的场景下使用,例如在一些对数据一致性要求不高,且希望通过随机淘汰来释放内存的场景。
- 举例:一个简单的广告展示缓存,展示的广告内容经常更新,使用
volatile - random
策略随机淘汰过期广告缓存数据。
- allkeys - lru
- 适用场景:应用于缓存中所有数据都可能被淘汰的场景,优先淘汰最近最少使用的键。广泛应用于通用的缓存场景,通过淘汰不常用数据来保证缓存空间。
- 举例:一个内容管理系统的缓存,缓存了文章、图片等各种数据,使用
allkeys - lru
策略,优先淘汰长时间未被访问的内容缓存。
- allkeys - random
- 适用场景:随机淘汰所有键,适用于对数据淘汰顺序没有特定要求,只是单纯为了释放内存的场景,并且对数据一致性要求不高。
- 举例:在开发测试环境中,为了快速模拟内存不足情况,可能使用
allkeys - random
随机淘汰键。
用户会话缓存场景策略选择及原因
在用户会话缓存场景中,建议选择allkeys - lru
策略。原因如下:用户会话缓存中的数据通常没有设置明确的过期时间,但随着用户数量的增加和会话的持续,缓存可能会占用大量内存。allkeys - lru
策略可以优先淘汰长时间未被使用的用户会话数据,这样能保证活跃用户的会话数据始终在缓存中,提高系统性能。例如,一个在线教育平台,用户登录后会产生会话缓存,使用allkeys - lru
策略,能保证经常参与课程学习、互动的用户会话不被淘汰,而淘汰长时间未活跃的用户会话缓存,有效管理内存。