当前位置:首页 > 数码 > Redis数据删除后-内存占用为何居高不下 (redis数据类型)

Redis数据删除后-内存占用为何居高不下 (redis数据类型)

admin5个月前 (04-11)数码29

作为面试经验丰富的开发人员,肯定会遇到过这样的问题:做了数据删除操作,为什么使用 top 命令时,仍然显示 Redis 占用了大量内存?

答案

这是因为当数据删除后,Redis 释放的内存空间会由内存分配器管理,并不会立即返回给操作系统。所以,操作系统仍然会记录为给 Redis 分配了大量内存。

used_memory_rss 记录了在操作系统的角度,Redis 进程占用的物理总内存。

Redis 内存消耗组成

Redis 内存消耗主要分为两部分:主进程消耗和子进程消耗。

主进程消耗

主进程消耗主要包括以下几个方面:

  • 自身进程占用内存:Redis 进程自身所占用的内存,通常非常小。
  • 数据对象内存:存储键值对的内存,通常是 Redis 中占用内存最大的部分。不同的数据类型占用的内存大小不同。
  • Redis
  • 缓冲区内存:Redis 有三个主要的缓冲区:客户端缓冲区、AOF 缓冲区和复制缓冲区。
  • 内存碎片:由操作系统的内存分配机制和 Redis 的存储特性引起。

子进程消耗

子进程消耗是指在 RDB 和 AOF 重写时 fork() 子进程的内存消耗。

查看内存指标

使用 infomemory 命令(集群环境下使用 clusterinfo 命令)查看当前 Redis 相关内存信息。

例如:


127.0.0.1:6379> infomemory
 Memory
used_memory:856472         Redis 存储数据占用的内存量
used_memory_human:836.40K   以人类可读形式返回内存总量
used_memory_rss:1282048     操作系统的角度,进程占用的物理总内存
used_memory_rss_human:1.22M  used_memory_rss 可读性模式展示
used_memory_peak:857448     内存使用的最大值,表示 used_memory 的峰值
used_memory_peak_human:837.35K  以可读的格式返回 used_memory_peak 的值
used_memory_lua:37888      Lua 引擎所消耗的内存大小。
used_memory_overhead:103104  Redis 自身的开销,包括数据结构和管理开销
used_memory_dataset:803552   存储键值对的内存大小
  

内存碎片

内存碎片主要由以下两个原因引起:

  • 操作系统的内存分配机制:操作系统通常使用一种称为内存管理单元(MMU)的硬件来管理内存。当分配内存时,MMU 会将内存划分为称为页面的固定大小块。当 Redis 分配内存时,它可能会分配多个页面,并且某些页面可能会未使用(称为碎片)。
  • Redis 存储特性:Redis 使用一种称为哈希表的内部数据结构来存储键值对。当添加或删除键值对时,哈希表可能会调整其大小。这可能导致未使用空间,从而产生碎片。

清理内存碎片

Redis 提供了一些命令来清理内存碎片:

  • shrinkmemory :释放 Redis 进程中未使用的内存。这可能会导致内存碎片的增加,但可以减少 Redis 占用的总内存量。
  • memory doctor :分析 Redis 内存使用情况并提供建议以减少碎片。不过,它不会自动修复碎片。
  • defragment :主动整理 Redis 内存,减少碎片。不过,它可能会导致 Redis 性能暂时下降。

在决定使用哪个命令时,需要权衡内存碎片的影响和 Redis 性能的影响。在某些情况下,可能需要重新启动 Redis 进程以彻底清除内存碎片。

总结

理解 Redis 内存管理对于优化 Redis 性能和高效利用内存资源非常重要。通过了解不同的内存消耗组成部分、内存碎片的原因以及如何清理碎片,可以确保 Redis 稳定高效地运行。


redis缓存数据,内存占满,怎么解决

1,增加内存;2,数据分流,即分散到多个电脑上面。 可以按一致性哈稀算法分布。 3,设置缓存数据的有效期,对于不重要的数据尽量不要缓存。 或缓存时间可以短一些。

请教大家一个 redis 内存占用的问题

用 del 命令删除了 redis 里五分之一的数据,可是 redis 的内存占用并没有下来, rdb 文件可以看到变小了的,只有 redis 重启才会降低内存占用,可是 redis 不能重启的。

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: Redis

“Redis数据删除后-内存占用为何居高不下 (redis数据类型)” 的相关文章

大厂Redis重试战略剖析-深化摸索行业通常 (大厂redis面试题)

大厂Redis重试战略剖析-深化摸索行业通常 (大厂redis面试题)

受网络和运转环境影响,运行程序或许遇到临时性缺点,如刹时网络颤抖、服务临时无法用、服务忙碌造成超时等。 智能重试机制可大幅防止此类缺点,保证操作成功口头。 1引发临时性缺点的要素...

安装并配置-Kubernetes-集群 (安装并配置mysql的实验总结)

安装并配置-Kubernetes-集群 (安装并配置mysql的实验总结)

日常开发中,基于自然支持散布式锁,大家在线上散布式名目中都经常使用过Redis锁。本文重要针对日常开发中加锁环节中某些意外场景启动解说与剖析。本文解说示例代码都在名目目录下 RedisLo...

Redis中分布式锁的防死锁机制 (redis中文网)

Redis中分布式锁的防死锁机制 (redis中文网)

分布式锁在分布式系统中是一种常见的需求。它用于防止对共享资源的并发访问,确保数据一致性和可靠性。在 Redis 中实现分布式锁可以通过使用 SETNX(SET if Not eXists)命令来尝...

排查与处置指南-Redis大Key危害 (排查与处置指的是什么)

排查与处置指南-Redis大Key危害 (排查与处置指的是什么)

这是一位同窗往年秋招参与得物一面遇到的疑问,完整面经如下: 这个疑问在面试中还是比拟容易遇到的,尤其是在调查性能优化相关常识点的时刻。 通常状况下,问了bigkey(大Key)还会继续...

Redis-使用哈希槽而非一致性哈希的原因 (redis淘汰策略有哪些)

Redis-使用哈希槽而非一致性哈希的原因 (redis淘汰策略有哪些)

引言 在分布式系统中,数据分片和负载均衡是至关重要的。哈希槽和一致性哈希两种方法都可以实现这些目标,但它们各有优缺点。本文将讨论为什么在某些情况下使用哈希槽而不是一致性哈希。 哈希槽 哈希...

引发业界震荡-Redis叛逃开源-得罪了 (引发业界震荡的因素)

引发业界震荡-Redis叛逃开源-得罪了 (引发业界震荡的因素)

Redis 许可变更:开源界的巨石 导言 近来,内存数据库供应商 Redis 宣布了一项重大变更,该变更将在开源界掀起轩然大波。Redis 将转向双许可模式,并采用更严格的许可条款。此举引起了社区...

成功多规则限流的思索与通常-Redis (成功的规则)

成功多规则限流的思索与通常-Redis (成功的规则)

市面上很多引见如何成功限流的,然而大局部都有一个缺陷,就是只能成功繁多的限流,比如1分钟访问1次或许60分钟访问10次这种,然而假构想一个接口两种规则都须要满足呢,咱们的名目又是散布式名目,应该如何处...

Redis-全面了解数据耐久性和复原机制-深度解析-耐久化 (redis淘汰策略有哪些)

Redis-全面了解数据耐久性和复原机制-深度解析-耐久化 (redis淘汰策略有哪些)

我们都知道在关于的开发或许面试的环节中,很容易就会遇到这个关于Redis耐久化的疑问,而我们在面试的时刻,经常会有小同伴只能说出这个Redis耐久化的两种形式,后续或许还会对比一些区别,然而关于怎...