maxmemory-policy。默认策略为 noeviction(不删除任何键),在内存占满后将拒绝所有写入操作并返回 OOM 错误。建议在创建实例后立即修改淘汰策略,避免因内存写满导致服务中断。如何配置参数,请参见 管理实例参数。缩写 | 全称 | 说明 |
LRU | Least Recently Used | 最近最少使用。记录每个键最近被访问的时间,优先淘汰最久未被访问的键。 |
LFU | Least Frequently Used | 最不经常使用。记录每个键被访问的次数,优先淘汰访问次数最少的键。 |
TTL | Time To Live | 生存时间。衡量键距离过期的剩余时间。 |
策略 | 作用范围 | 淘汰规则 |
allkeys-lru | 所有键 | 优先淘汰最近最少使用的键,直到腾出足够空间。 |
allkeys-lfu | 所有键 | 优先淘汰访问次数最少的键,直到腾出足够空间。 |
allkeys-random | 所有键 | 随机淘汰键,直到腾出足够空间。 |
volatile-lru | 设置了过期时间的键 | 优先淘汰设置了 TTL 的键中最近最少使用的键。 |
volatile-lfu | 设置了过期时间的键 | 优先淘汰设置了 TTL 的键中访问次数最少的键。 |
volatile-ttl | 设置了过期时间的键 | 优先淘汰 TTL 值较小(即即将过期)的键。若无设置 TTL 的键,回退到 noeviction 策略。 |
volatile-random | 设置了过期时间的键 | 随机淘汰设置了过期时间的键。 |
noeviction | — | 不删除任何数据,拒绝所有写入操作并返回错误信息 "(error) OOM command not allowed when used memory",此时仅响应读操作。 |
volatile-lru 仅作为混合场景下的备选方案。场景 | 推荐策略 | 说明 |
作为纯缓存使用(推荐) | allkeys-lru | 所有键均可被淘汰,优先移除最久未访问的键。使用频率最低的键后续命中概率也最低,淘汰后对业务影响最小。 |
部分键需要持久保留 | volatile-lru | 仅淘汰设置了过期时间的键,未设置过期时间的键不受影响。适用于既有缓存数据(设置 TTL)又有配置数据(不设置 TTL)的混合场景。 |
需要精确控制键的生命周期 | volatile-ttl | 优先淘汰即将过期的键,适合对数据时效性有明确要求的场景。 |
noeviction 修改为 allkeys-lru。# 查看当前淘汰策略CONFIG GET maxmemory-policy# 设置为 allkeys-lruCONFIG SET maxmemory-policy allkeys-lru
配置方式 | 问题说明 |
使用默认的 noeviction 且未修改 | 内存写满后所有写操作被拒绝,返回 OOM 错误,服务写入中断。 |
所有键均未设置 TTL,却使用 volatile-lru | volatile-* 策略仅作用于设置了过期时间的键,若所有键均未设置 TTL,等同于 noeviction,无法释放内存。 |
使用 allkeys-random 处理有优先级的缓存数据 | 随机淘汰不区分访问频率,可能误删高频访问的热点键,导致缓存命中率下降。 |
文档反馈