面试题答案
一键面试1. 理解不同内存淘汰策略
- volatile - lru:从设置了过期时间的键值对中,选择最近最少使用(Least Recently Used, LRU)的键值对淘汰,直到腾出足够内存。
- allkeys - lru:从所有键值对中,选择最近最少使用的键值对淘汰,直到腾出足够内存。
2. 根据对象空转时间选择内存淘汰策略
- 空转时间短且过期时间明确场景:
- 若业务中有较多设置了过期时间且空转时间短(表示近期可能还会使用)的对象,选择
volatile - lru
策略。这样能在不影响近期可能使用的非过期对象的前提下,优先淘汰长时间未使用且设置了过期时间的对象,避免过早淘汰可能仍需使用的对象,优化内存使用同时保证业务可用性。
- 若业务中有较多设置了过期时间且空转时间短(表示近期可能还会使用)的对象,选择
- 空转时间长且无过期时间区分场景:
- 当业务中对象空转时间普遍较长,不区分是否设置过期时间时,
allkeys - lru
策略更为合适。它会从所有键值对中淘汰最近最少使用的,有助于及时清理长时间未使用的对象,释放内存,提高系统整体性能。
- 当业务中对象空转时间普遍较长,不区分是否设置过期时间时,
3. 调整内存淘汰策略优化系统性能
- 监控与评估:
- 使用Redis监控工具(如
INFO
命令等),定期收集对象空转时间数据,分析不同业务时段对象的使用频率和空转时间分布。
- 使用Redis监控工具(如
- 动态调整:
- 根据监控数据,在业务高峰时,若发现大量短空转时间对象被频繁访问,可适当调整为更保守的内存淘汰策略(如对
volatile - lru
调整淘汰频率等),避免误淘汰。而在业务低谷,可适当激进,加快淘汰长时间空转对象,释放内存资源。
- 根据监控数据,在业务高峰时,若发现大量短空转时间对象被频繁访问,可适当调整为更保守的内存淘汰策略(如对
- 结合应用场景微调:
- 对于读写频繁的应用,若空转时间长的对象大多为冷数据,可适当提前淘汰,采用
allkeys - lru
且调整淘汰参数,使系统更积极淘汰冷数据,提高内存利用率,提升读写性能。若应用对过期时间敏感,即使对象空转时间长,但过期时间未到,仍需保留,此时需慎用allkeys - lru
,而应优化volatile - lru
策略的参数。
- 对于读写频繁的应用,若空转时间长的对象大多为冷数据,可适当提前淘汰,采用