Redis内存碎片的产生与清理

发布时间 - 2025-07-11 00:00:00    点击率:

在进行redis内存清理时,我们通常会关注redis的实时内存使用情况,通过执行info memory命令来查看内存使用情况:

我们常常关注的指标是used_memoryused_memory_rss,它们分别表示Redis数据占用的内存以及Redis向操作系统申请的总内存量。可以看到,这两项之间的差距相当大,我们也可以通过mem_fragmentation_ratio这一指标更直观地观察这种差距。

但是,Redis申请了如此多的内存到底在做什么呢?这确实令人感到疑惑。

我们需要了解以下几个关键词:

  • used_memory:Redis使用的内存量(以字节为单位)
  • used_memory_rss:操作系统分配给Redis的内存量
  • mem_fragmentation_ratio:操作系统分配给Redis的内存与Redis请求的内存的比率

那么,为什么会产生内存碎片呢?主要有两个原因:

  1. Redis自实现的内存分配器:在Redis中创建新的key-value对时,Redis需要向操作系统申请内存。通常,进程在不再需要申请的内存后会立即释放并归还给操作系统;但Redis不同,它在使用完内存后不会直接归还,而是将其保留在Redis自己实现的内存分配器中管理。这样做的好处是可以实现高性能,但其他应用程序可能就不太高兴了,因为Redis显得有些自私。
  2. value的更新:Redis的每个key-value对在初始化时分配的内存大小是最优的。当value发生变化且原来的内存大小不再适用时,就需要重新分配内存。重新分配后,Redis无法正常回收部分内存,这些内存就会一直被占用。

内存碎片率的意义如下(来自文档):

  • 大于1但小于1.5:这是正常值,表示存在一些内存碎片,但可以接受,因为它还能提高性能。
  • 大于1.5:内存碎片率较高,需要考虑是否进行内存碎片清理,这应该引起重视。
  • 小于1:表示Redis使用的内存不足,已经开始使用swap机制交换内存,即使用硬盘(可以在设置中禁用swap)。这意味着需要考虑扩容Redis。

如何清理内存碎片?(来自文档)

  • Redis版本4.0以下:通过重启Redis,可以自动归还所有内存,这种方法简单粗暴。
  • Redis版本4.0及以上:可以启用自动内存碎片清理:
127.0.0.1:6379[6]> config set activedefrag yes
OK

自动内存清理的相关配置如下:

# 启用主动碎片整理
# 碎片整理总开关
# activedefrag yes

当内存碎片达到多少时启动整理

active-defrag-ignore-bytes 100mb

当碎片率达到多少百分比时启动整理

active-defrag-threshold-lower 10

当碎片率小于多少百分比时启动整理

active-defrag-threshold-upper 100

在面对一些复杂的场景时,我们可能希望根据自己的策略进行内存碎片清理,Redis也提供了手动内存碎片清理的命令:

127.0.0.1:6379> memory purge
OK

总结:Redis对内存的占有欲很高,总是会留下一些不再使用的内存,这在生产环境中是无法接受的。因此,内存碎片的清理工作至关重要。


# redis  # 操作系统  # 为什么  # red  # 关键词  # 自己的  # 这是  # 碎片整理  # 几个  # 这一  # 就会  # 文档  # 就不 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  如何用景安虚拟主机手机版绑定域名建站?  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  原生JS实现图片轮播切换效果  谷歌Google入口永久地址_Google搜索引擎官网首页永久入口  Laravel如何实现事件和监听器?(Event & Listener实战)  深圳网站制作平台,深圳市做网站好的公司有哪些?  浅谈Javascript中的Label语句  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  如何用wdcp快速搭建高效网站?  如何用虚拟主机快速搭建网站?详细步骤解析  智能起名网站制作软件有哪些,制作logo的软件?  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  简单实现Android验证码  公司网站制作需要多少钱,找人做公司网站需要多少钱?  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  如何解决hover在ie6中的兼容性问题  Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  如何快速上传自定义模板至建站之星?  北京网站制作的公司有哪些,北京白云观官方网站?  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  如何在 Pandas 中基于一列条件计算另一列的分组均值  浅析上传头像示例及其注意事项  如何获取免费开源的自助建站系统源码?  如何在阿里云ECS服务器部署织梦CMS网站?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  高端企业智能建站程序:SEO优化与响应式模板定制开发  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  微信小程序 scroll-view组件实现列表页实例代码  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  Android自定义控件实现温度旋转按钮效果  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  做企业网站制作流程,企业网站制作基本流程有哪些?  如何在腾讯云服务器上快速搭建个人网站?  微信h5制作网站有哪些,免费微信H5页面制作工具?  lovemo网页版地址 lovemo官网手机登录  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  如何在IIS服务器上快速部署高效网站?  手机网站制作与建设方案,手机网站如何建设?  如何快速上传建站程序避免常见错误?  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  Laravel storage目录权限问题_Laravel文件写入权限设置