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

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

admin8个月前 (04-11)数码45

作为面试经验丰富的开发人员,肯定会遇到过这样的问题:做了数据删除操作,为什么使用 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叛逃开源-得罪了 (引发业界震荡的因素)

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

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

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

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

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

Redis内存治理与淘汰战略 (redis内存淘汰策略配置)

Redis内存治理与淘汰战略 (redis内存淘汰策略配置)

欢迎到来写代码那些事!在的环球里,内存治理是一门关键的艺术。本教程将带你深化了解Redis内存淘汰战略,教你如何在数据存储和性能之间找到最佳平衡点。 目录: 1.内存淘汰...

Redis轻松添加从节点-系统性能再飙升-零烦恼-零阻塞 (redis轻量级锁和redisson分布式锁的使用场景)

Redis轻松添加从节点-系统性能再飙升-零烦恼-零阻塞 (redis轻量级锁和redisson分布式锁的使用场景)

措施 配置复制积压缓冲区。 配置复制延迟。 增加主节点资源。 控制并发复制连接数。 从节点的磁盘写入延迟。 从节点的最大内存...

Redis-感觉-变慢了-检查这些潜在原因 (redis淘汰策略有哪些)

Redis-感觉-变慢了-检查这些潜在原因 (redis淘汰策略有哪些)

前言 本期继续分享 Redis 相关知识,帮助大家在 Redis 变慢时从容应对,冷静分析问题。为了方便阅读,文章分为上下两篇。 Redis 作为一款业内使用率最高的内存数据库,其性能...