news 2026/6/9 3:40:41

性能测试必备知识|如何管理Redis的内存?全是硬货

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
性能测试必备知识|如何管理Redis的内存?全是硬货

随着使用Redis的深入,我们不可避免的需要深入了解优化Redis的内存,本章将重点讲解如何管理Redis的内存。关注我们,每天都有技术好文分享给大家,小伙伴们觉得有用的话记得转发给身边的朋友哦。

一、内存消耗

当mem_fragmentation_ratio>1时,说明used_memory_rss-used_memory多出的部分内存并没有用于数据存储,而是被内存碎片所消耗,如果两者相差很大,说明碎片率严重。当mem_fragmentation_ratio<1时,这种情况一般出现在操作系统把Redis内存交换(Swap)到硬盘导致,出现这种情况时要格外关注,由于硬盘速度远远慢于内存,Redis性能会变得很差,甚至僵死。

Redis进程内消耗主要包括:自身内存+对象内存+缓冲内存+内存碎片,其中Redis空进程自身内存消耗非常少,通常used_memory_rss在3MB左右,used_memory在800KB左右,一个空的Redis进程消耗内存可以忽略不计。

缓冲内存主要包括:客户端缓冲、复制积压缓冲区、AOF缓冲区。客户端缓冲指的是所有接入到Redis服务器TCP连接的输入输出缓冲。输入缓冲无法控制,最大空间为1G,如果超过将断开连接。

复制积压缓冲区:Redis在2.8版本之后提供了一个可重用的固定大小缓冲区用于实现部分复制功能,根据repl-backlog-size参数控制,默认1MB。对于复制积压缓冲区整个主节点只有一个,所有的从节点共享此缓冲区,因此可以设置较大的缓冲区空间,如100MB,这部分内存投入是有价值的,可以有效避免全量复制AOF缓冲区:这部分空间用于在Redis重写期间保存最近的写入命令,AOF缓冲区空间消耗用户无法控制,消耗的内存取决于AOF重写时间和写入命令量,这部分空间占用通常很小。

Redis默认的内存分配器采用jemalloc,可选的分配器还有:glibc、tcmalloc。内存分配器为了更好地管理和重复利用内存,分配内存策略一般采用固定范围的内存块进行分配。内存碎片问题虽然是所有内存服务的通病,但是jemalloc针对碎片化问题专门做了优化,一般不会存在过度碎片化的问题,正常的碎片率(mem_fragmentation_ratio)在1.03左右。

一般以下场景容易出现高内存碎片问题:

频繁做更新操作,例如频繁对已存在的键执行append、setrange等更新操作。大量过期键删除,键对象过期删除后,释放的空间无法得到充分利用,导致碎片率上升。

出现高内存碎片问题时常见的解决方式如下:

数据对齐:在条件允许的情况下尽量做数据对齐,比如数据尽量采用数字类型或者固定长度字符串等,但是这要视具体的业务而定,有些场景无法做到。

安全重启:重启节点可以做到内存碎片重新整理,因此可以利用高可用架构,如Sentinel或Cluster,将碎片率过高的主节点转换为从节点,进行安全重启子进程内存消耗主要指执行AOF/RDB重写时Redis创建的子进程内存消耗。Redis执行fork操作产生的子进程内存占用量对外表现为与父进程相同,理论上需要一倍的物理内存来完成重写操作。

内存大页机制(Transport Huge Pages,THP),是linux2.6.38后支持的功能,该功能支持2MB的大页内存分配,默认开启。在redis.conf中增加了一个新的配置项“disable-thp”来控制THP是否开启。

disable-thp yes

子进程内存消耗总结如下:

1、Redis产生的子进程并不需要消耗1倍的父进程内存,实际消耗根据期间写入命令量决定,但是依然要预留出一些内存防止溢出。

2、需要设置sysctl vm.overcommit_memory=1允许内核可以分配所有的物理内存,防止Redis进程

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/30 9:30:28

Mybatis-Plus

Mybatis-plus 基于mybatis框架上的加强版&#xff0c;拥有mybatis的所有优点&#xff0c;同时也加了一些属于自己的优点&#xff0c;加入mybatis-plus不会对之前存在的mybatis产生冲突 官网 https://baomidou.com/introduce/ 所有详细的内容可访问这个网站 使用mybatis-plu…

作者头像 李华
网站建设 2026/5/20 12:47:32

当当 item_get - 商品详情接口对接全攻略:从入门到精通

当当 item_get&#xff08;官方标准名称为 dangdang.item.get&#xff09;是通过商品 ID 或 ISBN 获取图书、百货等商品全量结构化数据的核心接口&#xff0c;覆盖标题、价格、库存、属性、多媒体、销售与售后等字段&#xff0c;适配商品展示、价格监控、竞品分析、库存管理等场…

作者头像 李华
网站建设 2026/6/8 17:44:34

企业级部署建议:负载均衡下的多个翻译镜像调度策略

企业级部署建议&#xff1a;负载均衡下的多个翻译镜像调度策略 &#x1f4cc; 背景与挑战&#xff1a;AI 智能中英翻译服务的规模化需求 随着全球化业务的不断扩展&#xff0c;企业对高质量、低延迟的中英智能翻译服务需求日益增长。传统的单实例部署模式在面对高并发请求时&am…

作者头像 李华
网站建设 2026/6/9 1:38:27

金竹飞瀑谷:在瀑布深潭间,邂逅畲族的历史与风情

在江西省抚州市乐安县南部的群山之中&#xff0c;坐落着一处以瀑布群和原始森林风貌著称的景区——金竹飞瀑谷。这片区域也被称为金竹瀑布群&#xff0c;是国家4A级旅游景区&#xff0c;并曾获评“江西百景”之一。其核心景观是由大小26处瀑布组成的吓通瀑布群&#xff0c;总落…

作者头像 李华