不能。Redis 7.2 未改进 jemalloc 或淘汰策略算法,沿用 jemalloc 5.2.1 和原有 8 种策略,LRU/LFU 抽样逻辑与 7.0–7.1 完全一致,重点转向协议、安全与模块扩展。

Redis 7.2 没有引入对 jemalloc 的新改进,也没有修改内存淘汰策略的算法逻辑或新增策略类型。 它沿用 Redis 7.0 起默认绑定的 jemalloc 5.2.1,淘汰策略仍为那 8 种(noeviction、volatile-lru 等),LRU/ LFU 抽样逻辑、evictionPoolPopulate() 行为与 7.0–7.1 完全一致。
为什么 Redis 7.2 不动 jemalloc 和淘汰机制
jemalloc 是编译期依赖项,不是 Redis 运行时模块;它的升级需重新编译并验证 ABI 兼容性,而 jemalloc 5.2.1 在 7.0 中已足够稳定。Redis 团队将 7.2 的重点放在协议层(RESP3 默认启用)、安全加固(ACL 改进)、MODULE API 扩展和 Redis Stack 集成上,内存底层未列为迭代目标。
内存淘汰策略属于配置驱动行为,其核心函数如 performEvictions()、evictKey() 在 7.0 已完成 LFU 优化和抽样收敛性调优,7.2 仅修复了极个别边界条件下的计数偏差(如并发写入+过期键密集触发时的 lfu_freq 更新延迟),不构成“新改进”。
真正影响内存行为的 7.2 变更点
以下改动虽不改变 jemalloc 或淘汰算法本身,但会间接影响内存分配压力和淘汰触发时机:
-
maxmemory-samples默认值仍为5,但文档明确建议高负载实例设为10~20以提升 LFU/LRU 近似精度——这是运维侧可调的唯一相关参数 - 引入
lazyfree-lazy-user-del yes(默认关闭),开启后DEL大 key 不再阻塞主线程,改由后台线程异步释放内存,降低used_memory峰值波动,间接减少因瞬时内存冲高触发的误淘汰 -
active-defrag-threshold-lower等碎片整理参数阈值微调,使jemalloc的碎片回收更早介入,缓解mem_fragmentation_ratio > 1.5时的分配压力,避免因碎片导致的“明明有空闲内存却分配失败”现象
生产环境该关注什么而非“新特性”
与其等待所谓“7.2 内存改进”,不如检查这些常被忽略的实操点:
- 确认你用的是源码编译版且未手动替换
jemalloc:很多 Docker 镜像或包管理器安装的 Redis 实际链接的是系统libc malloc,可通过redis-cli info memory | grep mem_allocator验证是否为jemalloc-5.2.1 -
maxmemory设置必须预留至少 15% 缓冲给元数据、客户端缓冲区、复制积压缓冲区——否则used_memory刚到上限就触发淘汰,实际业务数据还没占满 - 淘汰策略选
allkeys-lfu时,务必配合监控evicted_keys和keyspace_hits/keyspace_misses,避免低频冷数据挤占高频热数据空间(LFU 计数在连接断开或重启后重置,有长尾偏差) -
listpack在 7.0 已替代ziplist成为 Hash/List/ZSet 小结构默认编码,但若业务中大量使用HSET插入超 512 个 field,默认仍退化为 hashtable——此时内存占用陡增,不是淘汰问题,是编码选择问题
Redis 内存稳定性从来不在版本号里,而在 info memory 的每个字段解读、CONFIG GET 的每项配比、以及大 key 是否真被 MEMORY USAGE 量准——7.2 只是让这些事变得更可观察,而不是自动变好。


















