首页/数据/Redis 进阶速查/maxmemory-samples 调参与开销
内存与管理99 条

maxmemory-samples 调参与开销

提升 maxmemory-samples 可改善淘汰命中率,代价是每次淘汰的 CPU 采样成本;低延迟实例适度提高,吞吐受限实例保持默认。

Redis 进阶速查数据更新于 2026-10-13

采样数如何影响淘汰决策

maxmemory-samples 控制近似 LRU 与近似 LFU 算法在每次淘汰时抽样检查多少个键,默认 5。采样越多,挑出的候选越接近真正的最久未用或最少使用,命中率相应更好,代价是每次淘汰的 CPU 开销上升。它不改变可用内存,只是让同样的内存装得更「有用」。当命中率瓶颈来自容量本身时,调大采样不会有明显收益。

基本信息

配置项maxmemory-samples
默认值5
建议尝试范围10 附近
作用对象近似 LRU / LFU 淘汰候选选择
配套项maxmemory-policy、maxmemory-eviction-tenacity
LFU 相关lfu-log-factor、lfu-decay-time
修改方式CONFIG SET 即时生效,重启回配置文件

典型使用场景

  • 缓存命中率下降但内存充足,怀疑淘汰挑错了键
  • 低延迟实例容量吃紧,希望用少量 CPU 换取更准的淘汰
  • 对比不同采样值下的命中率与 P99 延迟,找收益拐点
  • 使用 allkeys-lru 且键访问分布不均,需要提升淘汰精度
  • LFU 策略下调参,配合采样数一起评估计数衰减的影响
  • 压测环境模拟线上内存水位,为参数定稿提供依据
  • 新实例上线前统一淘汰参数基线,避免各环境行为不一致
  • 排查缓存抖动时排除淘汰精度不足这一可能原因

调整与验证

调整与验证
redis-cli CONFIG GET maxmemory-samples        # 当前采样数
redis-cli CONFIG SET maxmemory-samples 10      # 适度提高到 10
redis-cli CONFIG GET maxmemory-policy          # 确认淘汰策略
redis-cli CONFIG GET maxmemory-eviction-tenacity
redis-cli INFO stats | grep -E 'keyspace_hits|keyspace_misses'
redis-cli INFO stats | grep -E 'evicted_keys'  # 淘汰活跃度
redis-cli CONFIG SET maxmemory-samples 5       # 无收益时回退默认值

采样数影响对照

取值淘汰精度开销与适用
5(默认)近似程度一般开销最低,通用场景
10 左右明显更接近真实 LRU低延迟实例常用的折中
更高精度提升有限淘汰频繁时 CPU 抖动上升
调整后用业务指标验证收益:命中率没有提升就回退,别让参数在无人复核的状态下长期漂移。
采样数只作用于淘汰候选的挑选,键本身的内存开销、过期策略与 TTL 设计对命中率的影响通常更大。
近似 LRU 不等于精确 LRU,采样再多也只是让决策更接近理想值,不要期待命中率出现数量级变化。

易错点

  • 只调采样而不解决容量问题,命中率瓶颈在内存量时收益有限
  • 采样数设得过高且淘汰频繁,CPU 抖动与延迟尖峰一起上升
  • 改完只看命中率不看延迟,用尾部体验换来了很小的一点缓存收益
  • LFU 场景只调采样不动计数衰减参数,热点判定仍然失真
  • 运行期改完没写回配置文件,重启后参数悄悄回到默认

数据来源与参考

  • Redis 官方文档:maxmemory-samples 说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌