Redis 内存碎片是什么?如何清理?

Redis 内存碎片是什么?如何清理?
最新回答
﹎回★忆﹎

2026-10-30 15:15:11

Redis 内存碎片是未被充分利用的内存空间,这在各大公司的后端面试中常被提及,了解如何清理内存碎片对于日常开发也大有裨益。

内存碎片形成主要有两个原因:一是Redis分配内存时可能比实际需求多出额外空间;二是频繁修改数据导致内存的高效利用受到影响。

在Redis内部,使用自定义的内存分配器zmalloc,它在分配内存时除了要求的size大小还会额外分配PREFIX_SIZE大小的内存。同时,Redis默认使用jemalloc作为内存分配器,该分配器会按照一系列固定大小(如8字节、16字节等)分配内存,这样在满足需求时,会留下额外空间形成碎片。

要查看Redis内存碎片情况,可执行`info memory`命令获取相关参数信息。计算内存碎片率的公式为:`mem_fragmentation_ratio = used_memory_rss / used_memory`,其中,`used_memory_rss`是操作系统分配给Redis的物理内存空间大小,`used_memory`是Redis内存分配器实际申请使用的内存空间大小。如果`mem_fragmentation_ratio`大于1.5,表示内存碎片较为严重。

清理Redis内存碎片,Redis 4.0-RC3版本后提供了自动内存整理功能。通过`config set activedefrag yes`命令开启内存清理,并通过`config set active-defrag-ignore-bytes 500mb`和`config set active-defrag-threshold-lower 50`设置清理阈值。同时,可调整`active-defrag-cycle-min`和`active-defrag-cycle-max`参数来控制清理过程对性能的影响。

重启Redis节点也能实现内存碎片的整理。在高可用架构的Redis集群中,将内存碎片率过高的主节点转换为从节点,进行安全重启,也是一种有效清理内存碎片的方法。