淘汰的尽力程度
maxmemory-eviction-tenacity 决定内存超限时 Redis 愿意花多大力气把内存压回上限之内:值越高越坚决,代价是单次操作耗时变长、延迟波动更大;值越低越温和,但短时超限的状态会持续更久,写入被拒的窗口也随之拉长。
基本信息
| 配置项 | maxmemory-eviction-tenacity |
|---|---|
| 默认值 | 10 |
| 取值区间 | 0 到 100 |
| 作用范围 | 内存逼近上限时的淘汰努力程度 |
典型使用场景
- 偶发写入报错,想减少内存超限的持续时间
- 低延迟优先的业务,希望淘汰更温和
- 与淘汰策略配合做细粒度调优
- 排查「超限后长时间回不到上限内」
- 压测中观察不同取值对尾部延迟的影响
调整与观察
调整与观察
# 查看当前值(默认 10)
redis-cli CONFIG GET maxmemory-eviction-tenacity
# 允许更积极的回收,缩短写入被拒的窗口
redis-cli CONFIG SET maxmemory-eviction-tenacity 30
# 低延迟优先的场景保持或调低
redis-cli CONFIG SET maxmemory-eviction-tenacity 10
# 改完看淘汰计数与延迟事件,判断代价是否可接受
redis-cli INFO stats | grep evicted_keys
redis-cli LATENCY LATEST取值效果对照
| 取值 | 行为 | 适用场景 |
|---|---|---|
| 0-10 | 淘汰努力低,超限状态持续时间长 | 对延迟极敏感、可容忍偶发写入失败 |
| 10 | 默认值,兼顾回收与延迟 | 多数生产场景 |
| 30 左右 | 更积极回收,延迟波动上升 | 偶发写入被拒且能接受抖动 |
| 100 | 尽全力淘汰,单次操作耗时明显 | 对写入失败更敏感、延迟容忍度高 |
| maxmemory-policy | 决定淘汰哪些键 | 与 tenacity 配合理解 |
这个参数只改变「努力程度」,不改变「淘汰谁」;调整顺序通常是先定淘汰策略,再用 tenacity 微调节奏。
用 CONFIG SET 改只对当前运行实例生效,重启后会回到配置文件里的取值;多实例环境记得同步修改配置模板,否则重启后参数静默失效。
调高之后如果延迟抖动明显变大,应该回到内存根因(数据增长、客户端缓冲、大键)上处理,而不是继续加码参数。