Redis删除(del)key后内存无法释放的原因和解决方案
现象
项目中,redis的 key value 量太多,决定对某个db下的key进行删除,也就是Del key。
在删除前,通过info memory看下内存情况
Memory
used_memory:2205816296
used_memory_human:4.8G
used_memory_rss:5579214848
used_memory_rss_human:5.70G
...
...
通过一个小程序,一直删除可丢弃的key。
1小时后,过来一看:
Memory
used_memory:2205816296
used_memory_human:2.05G
used_memory_rss:5579214848
used_memory_rss_human:5.70G
...
...
发现redis内部的used_memory使用量已经下降到2.05G了,但是used_memory_rss(redis在系统中进程占用的内存量)并未降低。
原因
官方已经说了具体原因
https://redis.io/topics/memory-optimization
概括了点内容:
当键被删除时,Redis并不总是释放(返回)内存到操作系统。这并不是Redis的特别之处,但大多数malloc()实现都是这样工作的。
例如一个实例有5gb的数据,然后删除相当于2gb的数据,used_memory_rss可能仍会5 gb左右。这是因为底层分配器不能轻松地释放内存。例如,通常将删除的大多数键分配到与其他仍然存在的键相同的页面中。
然而分配器是聪明和能够重用空闲块的内存,所以在你释放2 gb的5 gb的数据集,当你开始再次增加键,您将看到used_memory_rss保持稳定而不会再增加很多。分配器基本上是尝试重用以前(逻辑上)释放的2GB内存。
解决方案
通过原因可以知道,我们其实不用去关注。
特别是我们定义了maxmemory后,并且定义了maxmemory_policy,那么即使内存满了,redis也会按照淘汰机制方案,清除一些不需要的key,来存放新的key。
但是如果已经影响到系统内存使用了,也有下面三种方案:
- 可以通过 MEMORY PURGE命令进行内存整理。(瞬时,能稍微腾出rss内存空间)
- 开启activedefrag,热碎片整理。(会占用CPU,在主线程执行,可以设置CPU占用率)
- 重启。
Redis删除(del)key后内存无法释放的原因和解决方案相关推荐
- redis删除指定key
redis删除指定key 1.打开redis目录并打开redis-cli.exe 如果直接输入get key会出现以下问题,表示需要认证,也就是需要登录用户 使用auth password登录即可 然 ...
- redis缓存穿透,缓存击穿,缓存雪崩原因和解决方案
redis缓存穿透,缓存击穿,缓存雪崩原因和解决方案 参考文章: (1)redis缓存穿透,缓存击穿,缓存雪崩原因和解决方案 (2)https://www.cnblogs.com/shisuiliun ...
- redis删除过期key的算法_面试官别再问我Redis内存满了该怎么办了
概述 Redis的文章,我之前写过一篇关于「Redis的缓存的三大问题」,累计阅读也快800了,对于还只有3k左右的粉丝量,能够达到这个阅读量,已经是比较难了. 这说明那篇文章写的还过得去,收到很多人 ...
- Redis删除大Key
原文链接:https://www.dubby.cn/detail.html?id=9112 这里说的大key是指包含很多元素的set,sorted set,list和hash. 删除操作,我们一般想到 ...
- php redis删除所有key,PHP 对 Redis key 值的操作
1.DEL $redis = new redis(); $redis->connect('127.0.0.1',6379); // The first case 删除单独的 key $redis ...
- php redis删除所有key,redis中批量删除key的方法
Redis是一个高性能的key-value数据库.redis中可以借助Linux的xargs指令来批量删除key,也可以使用flushdb和flushall命令删除所有key. 批量删除Key Red ...
- redis删除指定key中的指定元素
------------------------删除指定key-------------------------------- 127.0.0.1:6379> keys * 1) "_ ...
- redis删除指定key中的指定元素的方法
查询所有key值 127.0.0.1:6379> keys *1) "_kombu.binding.celery.pidbox"2) "_kombu.binding ...
- redis删除指定key以及清空库
1.执行whereis redis 查找redis安装路径 [root@zuj home]# whereis redis redis:/usr/local/redis 2.切换到redis脚本目录 ...
最新文章
- [推荐]Silverlight 2 开发者海报
- 教你如何找出 .NET 进程中的所有托管异常
- [20180602]函数与标量子查询3.txt
- 【青岛】12月16日.NETCore与AI技术交流会-等你来哦!!
- 监控mysql数据库里的数据_有谁知道哪种软件可以监控mysql数据库上执行的数据脚本吗?...
- 提升windows 2000的启动速度
- java log4j 热部署_JAVA类加载器分析--热部署的缺陷(有代码示例,及分析)
- mysql binlog-row-image=minimal_十一:参数binlog_row_image(笔记)
- Python游戏编程(一)“猜数字”游戏
- Whmcs、ZKEYS、星外、云谷IDCsystem、一对一、Swapidc哪个主机系统好用?
- mysql英文版怎么调中文_MySQL英文版的使用
- linux 开源网卡驱动,AMDGPU linux开源驱动
- JVM-垃圾回收机制
- 基于Node.js的3DTiles三维倾斜摄影模型爬虫
- 机房温度可视化:物联网下的数据中心环境运维新方式
- sshd: no hostkeys available — exiting
- 回家的票抢上了吗?聊聊12306为什么时不时要崩一下
- Android 在分享列表添加自己的应用
- 20世纪最伟大的十大算法
- leetcode简单之577.员工奖金
热门文章
- 猫扑网互动营销六大模式
- Azure VM加速网络
- 逆元 与等比数列求和
- 全球近90%的电影院现已对外开放;日本千叶将在东京奥运期间推出虚拟旅游 | 美通社头条...
- am超外差收音机matlab,超外差式AM/FM收音机的调试
- Oracle EBS财务模块(四)账套
- 2016年PMP考试时间安排
- 阿里巴巴为什么退市?阿里巴巴为什么退出香港股市?
- 「镁客早报」NASA公布“门户计划”,未来将在月球轨道建立空间站;特斯拉裁掉Model3交付部门一半以上...
- 张兴华:云端架构助力企业快速成长