请列举 Redis 支持的键值淘汰策略,并简述每种策略的适用场景与选择依据。
考察说明
考察对 Redis 内存管理和数据淘汰机制的理解,包括策略分类、触发条件和选择考量。
回答思路
- 【回答框架 1】Redis 内存淘汰策略指内存用完时如何选择键进行删除以释放空间。主要分为不淘汰和淘汰两大类,不淘汰时写入返回错误。
- 【回答框架 2】淘汰策略包括:noeviction、allkeys-lru、volatile-lru、allkeys-lfu、volatile-lfu、allkeys-random、volatile-random、volatile-ttl。其中 volatile 开头的只作用于设置了过期时间的键。
- 【回答框架 3】LRU 是基于最近最少使用近似算法,使用采样淘汰以降低开销;LFU 是基于访问频率,适用于访问模式倾斜明显的场景;random 简单但效果较差;ttl 优先淘汰剩余生存时间最短的键。
- 【回答框架 4】选择策略需结合业务:缓存场景常用 allkeys-lru 或 allkeys-lfu;若需精确控制过期键则用 volatile 系列;若内存敏感且可容忍写入失败则用 noeviction 配合监控。
- 【回答框架 5】配置通过 maxmemory 和 maxmemory-policy 参数控制,实际效果受键数量、采样数和访问模式影响,需结合压测和监控调整。
- 【关键点 1】Redis 默认策略为 noeviction,内存满时写入返回错误。
- 【关键点 2】LRU 为近似实现,通过 maxmemory-samples 控制精度。
- 【关键点 3】LFU 适合访问频率差异大的场景,可配置衰减周期。
- 【关键点 4】volatile 系列不影响未设置过期时间的键。
- 【关键点 5】选择策略需权衡数据重要性、访问模式和内存限制。
- 【易错点 1】不要认为淘汰策略可以保证业务幂等或数据一致,只负责内存管理。
- 【易错点 2】不要忽视 maxmemory-samples 对 LRU 精度的影响。
- 【易错点 3】不要以为 TTL 策略会精确按剩余时间淘汰,只是近似。