删除数据后, redis 内存占用还是很高怎么办?

现象:

reids 做了数据删除,数据量不大,使用 top 命令看,发现还是占用大量内存

原因:

1.redis 底层内存根据内存分配器分配,不会立刻释放

2.redis 释放的内存空间不是连续的,存在碎片

内存碎片怎么形成的?

1、 内因是内存分配策略 申请 20 字节, jemalloc 会分配 32 字节,提前分配

2、外因是 删除不同大小,不同位置的键值对,会出现碎片

怎么定位呢?

info memory 命令 key 查看内存碎片率

used_memory:1073741736

used_memory_human:1024.00

Mused_memory_rss:1997159792

used_memory_rss_human:1.86G

mem fragmentation ratio:1.86

mem fragmentation ratio 指标, 两个指标 used memory rss 和used memory 相除的结果。如果大于 1 小于 1.5 正常,大于 1.5,可以采取措施减少内存碎片

怎么减少呢?

1、最简单粗暴 :重启 redis 实例 ,缺点是导致一部分数据丢失、如果数据量大,aof 日志恢复,时间长,恢复期间无法提供服务

2、4.0 后面,提供新配置自动清理

启用配置

config set activedefrag yes

active-defrag-ignore-bytes 100mb: 表示内存碎片的字节数达到 100MB 时,开始清理;

active-defrag-threshold-lower 10: 表示内存碎片空间占操作系统分配给 Redis 的总空间比例达到 10% 时,开始清理.

active-defrag-cycle-min 25:表示自动清理过程所用 CPU 时间的比例不低于 25%保证清理能正常开展

active-defrag-cycle-max 75: 表示自动清理过程所用 CPU 时间的比例不高于 75%,一旦超过,就停止清理,从而避免在清理时,大量的内存拷贝阻塞 Redis,导致响应延迟升高。

相关推荐
一叶飘零_sweeeet2 小时前
从手写 Redis 分布式锁到精通 Redisson:分布式系统的并发控制终极指南
redis·分布式·redisson
睡觉的时候不会困3 小时前
Redis 主从复制详解:原理、配置与主从切换实战
数据库·redis·bootstrap
程序员的世界你不懂5 小时前
【Flask】测试平台开发,新增说明书编写和展示功能 第二十三篇
java·前端·数据库
自学也学好编程5 小时前
【数据库】Redis详解:内存数据库与缓存之王
数据库·redis
JAVA不会写6 小时前
在Mybatis plus中如何使用自定义Sql
数据库·sql
IT 小阿姨(数据库)6 小时前
PgSQL监控死元组和自动清理状态的SQL语句执行报错ERROR: division by zero原因分析和解决方法
linux·运维·数据库·sql·postgresql·centos
ChinaRainbowSea6 小时前
7. LangChain4j + 记忆缓存详细说明
java·数据库·redis·后端·缓存·langchain·ai编程
小马学嵌入式~7 小时前
嵌入式 SQLite 数据库开发笔记
linux·c语言·数据库·笔记·sql·学习·sqlite
Java小白程序员7 小时前
MyBatis基础到高级实践:全方位指南(中)
数据库·mybatis
Monly218 小时前
人大金仓:merge sql error, dbType null, druid-1.2.20
数据库·sql