redis删除过期key的算法_玩转Redis-删除了两百万key,为什么内存依旧未释放?

在Redis中删除大量key后,内存未见明显释放,原因是Redis的内存分配器并未立即归还内存给操作系统。内存碎片、jemalloc的内存分配策略以及数据修改删除引起的内存空间扩容和释放是主要原因。Redis提供了如`memory purge`、`activedefrag`等手段来处理内存碎片,但在生产环境中需谨慎操作。
摘要由CSDN通过智能技术生成

1、背景

公司某业务使用的Redis集群是自建的,前段时间计划将自建Redis集群迁移到购买的阿里云集群。
老集群共有 350W key,占用内存 8.8 G,DTS迁移前分析发现有近两百万的key无需迁移,于是提前删除了这两百万key。
删除key后发现redis内存竟然几乎无变化,350W key删除了两百万,怎么也得释放几G内存吧。难道删除失败了?通过比对数据发现,计划被删除的数据确实已经删除了。
为什么删除了两百万key,内存未释放呢?这个问题一直困扰着我,通过查阅资料终于弄明白了。

2、如何查看Redis内存数据

2.1、info memory

进入Redis命令行界面后,使用 info memory 命令(集群使用 cluster info 命令) 即可查看当前Redis相关内存信息,部分信息展示如下:

127.0.0.1:6379> info memory
# Memory

# Redis 保存数据申请的内存空间
used_memory:9469412118
used_memory_human:8.82G

# 操作系统分配给 Redis 进程的内存空间
used_memory_rss:11351138316
used_memory_rss_human:10.57G

# Redis 进程在运行过程中占用的内存峰值
used_memory_peak:12618222522
used_memory_peak_human:11.75G

# 内存碎片率,used_memory_rss / used_memory
mem_fragmentation_ratio:1.20

# Redis 最大可用内存,0表示不限制
maxmemory:0
maxmemory_human:0B

# 内存分配器
mem_allocator:jemalloc-5.1.0

我们来解释下每个属性的含义:

used_memory:Redis 保存数据申请的内存空间,包含Redis进程及数据占用内存,单位 Byte;

used_memory_rss:操作系统分配给 Redis 进程的内存空间(包含内存碎片占用的空间),是从操作系统角度看的数据;此数据结果约等于top、ps命令看到的数据结果。

used_memory_peak:Redis 进程在运行过程中占用的内存峰值,used_memory_peak >= used_memory;

maxmemory:Redis 最大可用内存,0表示不限制。可以方便的实现对一台服务器部署多个Redis进程的内存控制;防止所用内存超过服务器物理内存;便于数据超出内存限制时执行LRU等删除策略。

XXX_human:表示以可读的方式返回XXX。

mem_fragmentation_ratio:内存碎片率,used_memory_rss / used_memory。大于1的部分为redis碎片占用的大小,建议值 大于 1 但小于 1.5,大于1.5说明碎片过多需要清理了。

需要注意的是,通常情况下 used_memory_rss 是大于 used_memory 的;但也有例外,当used_memory_rss 小于 used_memory 时,说明 操作系统分配给Redis进程的数据,不足以满足实际存储数据的需求,此时Redis部分内存数据会转换到Swap中,随之引发的问题是,当Redis访问Swap中的数据时,性能会下降

2.2、memory xxx 指令

2.2.1、memory doctor

列出 Redis 服务器遇到的不同类型的内存相关问题,并提供相应的解决建议

127.0.0.1:6379> memory doctor
Hi Sam, I can't find any memory issue in your instance. I can only account for what occurs 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值