首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Redis RSS 2.7 and,而且还在增加。已用内存只有40MB。为什么?

Redis是一个开源的内存数据结构存储系统,它支持多种数据结构,如字符串、哈希、列表、集合、有序集合等。Redis的特点是高性能、高可用、可扩展、灵活和丰富的功能。

Redis RSS(Resident Set Size)是指Redis进程在内存中实际占用的大小。RSS 2.7表示Redis进程当前占用的内存大小为2.7MB。

Redis之所以能够在只使用40MB的内存情况下运行,主要有以下几个原因:

  1. 数据结构优化:Redis采用了高效的数据结构,如压缩列表、跳跃表等,以减少内存占用。它还使用了特定的编码方式来节省存储空间,例如对于较小的整数值,Redis会使用整数编码来存储,而不是使用字符串编码。
  2. 内存回收机制:Redis使用了一种称为"写时复制"的机制来进行内存回收。当一个键被修改时,Redis会先复制一份原始值的副本,然后对副本进行修改,这样可以保证原始值在被修改期间不会被访问,从而实现内存的高效回收。
  3. 惰性删除:Redis采用了惰性删除的策略,即当键过期时,并不会立即删除该键,而是在下次访问该键时才进行删除。这样可以避免频繁的内存回收操作,提高了性能。
  4. 压缩机制:Redis还提供了压缩机制,可以对存储的数据进行压缩,从而减少内存占用。压缩可以通过配置参数进行开启,并可以设置压缩的阈值。

Redis的低内存占用使其在一些资源受限的环境中得到广泛应用,例如嵌入式设备、移动设备等。此外,Redis还具有高性能、高可用性和丰富的功能,适用于缓存、消息队列、计数器、排行榜、实时分析等多种场景。

腾讯云提供了云数据库Redis版(https://cloud.tencent.com/product/redis)作为Redis的托管服务,用户可以方便地在腾讯云上部署和管理Redis实例。云数据库Redis版提供了高可用、自动备份、数据迁移等功能,可以满足不同场景下的需求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

故障分析 | Redis 内存碎片率太低该怎么办?

官方的计算 Redis 内存碎片率的公式如下: mem_fragmentation_ratio = used_memory_rss / used_memory 即 Redis 向操作系统中申请的内存 与...为什么此时 Redis 不向操作系统申请配置指定的 512M 内存?...答案是:只有在 slave 端初次建立复制/失连时才会真正向操作系统申请复制积压缓存;并且不是一次性向 OS 申请 512M,而是按需使用;可以简单测试如下。...能看到复制积压缓冲区、复制客户端输出缓冲区逐渐消耗内存,但操作系统实际内存 used_memory_rss 并非一次性打满,而是按需增加。 碎片率小于 1 跟数据量有无关系?...可以看到 used_memroy 和 used_memory_rss 都会逐渐变大,内存碎片率取值将逐渐趋于 1。 ?

88830

Redis 内存碎片率太低该怎么办?

官方的计算 Redis 内存碎片率的公式如下:mem_fragmentation_ratio = used_memory_rss/used_memory即 Redis 向操作系统中申请的内存与 分配器分配的内存总量的比值...image.png为什么此时 Redis 不向操作系统申请配置指定的 512M 内存?...答案是:只有在 slave 端初次建立复制/失连时才会真正向操作系统申请复制积压缓存;并且不是一次性向 OS 申请 512M,而是按需使用;可以简单测试如下。...image.png能看到复制积压缓冲区、复制客户端输出缓冲区逐渐消耗内存,但操作系统实际内存 used_memory_rss 并非一次性打满,而是按需增加。碎片率小于 1 跟数据量有无关系?...持续灌入数据,image.png可以看到 used_memroy和 used_memory_rss都会逐渐变大,内存碎片率取值将逐渐趋于 1。

89720
  • PHP实现Bitmap的探索 - GMP扩展使用

    而且可以预想到对于两个较大的bitmap key执行bitOp也是非常消耗CPU的,应该尽量避免在存储型的redis实例中做这种十分消耗CPU的计算操作。...如果最终结果用户群中的第一个uid是一个特别大的值的话,可以先set 1K再设置2K..3K…这样缓存的增加bitmap的大小避免redis卡住。...为什么是数组呢?...这里需要提一句,我的机器只有8G,所以程序可能会用到swap分区,而ps命令结果中的RSS不统计swap分区的占用,在我实际实现中发现ps结果中RSS一列显示占用的内存会随着时间慢慢减少,但是我的程序中...其实还可以再优化一下,想象下如果我们有一个用户群,里面只有一个uid:64000000(表示为数组的话就是:[64000000]),为了存储这个用户我们需要占用7.6M内存,而这个用户群中仅仅只有一个元素

    9510

    Redis删除数据后,为什么内存占用率还是很高?

    在使用 Redis 时,我们经常会遇到这样一个问题:明明做了数据删除,数据量已经不大了,为什么使用 top 命令查看时,还会发现 Redis 占用了很多内存呢?...used_memory_rss_human:1.86G … mem_fragmentation_ratio:1.86 mem_fragmentation_ratio: Redis 当前的内存碎片率 used_memory_rss...: 操作系统实际分配给 Redis 的物理内存空间,里面就包含了碎片 used_memory: Redis 为了保存数据实际申请使用的空间 mem_fragmentation_ratio = used_memory_rss...,如果只有一个 Redis 实例,恢复阶段无法提供服务。...注意事项 为了尽可能减少碎片清理对 Redis 正常请求处理的影响,自动内存碎片清理功能在执行时,还会监控清理操作占用的 CPU 时间,而且还设置了两个参数,分别用于控制清理操作占用的 CPU 时间比例的上

    1.9K21

    String底层实现——动态字符串SDS

    redis源码分析系列文章 [Redis源码系列]在Liunx安装和常见API  为什么要从Redis源码分析 前言 上篇我们已经了解了Redis是什么,在Linux上如何安装,常见的数据类型和API...如果字符串小于等于44,实际的数据和RedisObject在内存中地址相邻,如下图。 如果字符串大于44,实际的数据和RedisObject在内存中地址不相邻,如下图。...SDS的优势 我们可以看到是对字符数组的再封装,但是为什么呢,直接使用字符数组不是更简单吗?这要从C和Java语言的根本区别说起。...所以设计了SDS数据结构,在原来的字符数组外面增加总长度,和已用长度,这样每次直接获取已用长度即可。复杂度为O(1)。...明显还是sdshdr8,所以不要数据迁移,还在原来的基础上添加t即可。

    59030

    一文了解 Redis 内存监控和内存消耗

    used_memory_rss 从操作系统的角度显示 Redis 进程占用的物理内存总量 used_memory_rss_human used_memory_rss 的用户宜读格式的显示 used_memory_peak...空进程自身内存消耗非常少,通常 used_memory_rss 在 3MB 左右时,used_memory 一般在 800KB 左右,一个空的 Redis 进程消耗内存可以忽略不计。...而且输入缓冲区不受 maxmemory 控制,假设一个 Redis 实例设置了 maxmemory 为 4G,已经存储了 2G 数据,但是如果此时输入缓冲区使用了 3G,就已经超出了 maxmemory...内存分配器为了更好地管理和重复利用内存,分配内存策略一般采用固定范围的内存块进行分配。具体的分配策略后续会具体讲解,但是 Redis 正常碎片率一般在 1.03 左右(为什么是这个值)。...只有等到某一页发生修改时,才真正进行页的复制。

    90700

    我们为什么使用 Redis

    如果你从来没使用过 Redis 数据库,那你肯定会问,为什么我们要用 Redis 数据库,我只使用 MySQL 或 Oracle 就够了。...由于 Redis 是开源的,当你打开源代码,就会发现 Redis 都是用 C 语言写的,C 语言是最接近计算机语言的代码,而且只有区区 5 万行,保证了 Redis 的速度。...Redis 的持久化可以保证将内存中的数据每隔一段时间就保存于磁盘中,重启的时候会再次加载到内存。 特性三,支持多种数据结构。...分别支持哈希、集合、BitMaps,还有位图(多用于活跃用户数等统计)、HyperLogLog(超小内存唯一值计数,由于只有 12K,是有一定误差范围的)、GEO(地理信息定位)。...Redis 最大的作用是增加你原来的访问性能问题,试想如果项目已经搭建好,这个项目一般是不太可能更换的。但是 Redis 独特的存在是只需要增加一层,把常用的数据存放在 Redis 即可。

    1.4K20

    理解Redis内存

    以可读的格式返回 used_memory used_memory_rss 从操作系统的角度显示 Redis 进程占用的物理内存总量 used_memory_rss_human used_memory_rss...,当这种情况出现时,应该及时排查,如果内存不足应该及时处理,如增加Redis节点、增加Redis服务器的内存、优化应用等。...当然,这部分内存不属于Redis进程,也不会统计在used_memory和used_memory_rss中。...而且输入缓冲区不受 maxmemory 控制,假设一个 Redis 实例设置了 maxmemory 为 4G,已经存储了 2G 数据,但是如果此时输入缓冲区使用了 3G,就已经超出了 maxmemory...例如,如果对数据的更改频繁,而且数据之间的大小相差很大,可能导致redis释放的空间在物理内存中并没有释放,但redis又无法有效利用,这就形成了内存碎片。

    94420

    面试官:Redis 性能优化都有哪些方法?

    前言 Redis作为高性能的内存数据库,在大数据量的情况下也会遇到性能瓶颈,日常开发中只有时刻谨记优化铁则,才能使得Redis性能发挥到极致。...增加机器内存或者使用Redis集群 物理机器的内存不足将会导致操作系统内存的Swap。...而且,和我刚才说的 AOF 日志文件读写使用 fsync 线程不同,swap 触发后影响的是 Redis 主 IO 线程,这会极大地增加 Redis 的响应时间。...因此增加机器的内存或者使用Redis集群能够有效的解决操作系统内存的Swap,提高性能。 10....mem_fragmentation_ratio = used_memory_rss/ used_memory used_memory_rss 是操作系统实际分配给 Redis 的物理内存空间,里面就包含了碎片

    1.4K20

    首长,Redis性能优化十三条军规立好了,请过目~

    前言 Redis作为高性能的内存数据库,在大数据量的情况下也会遇到性能瓶颈,日常开发中只有时刻谨记优化铁则,才能使得Redis性能发挥到极致。...增加机器内存或者使用Redis集群 物理机器的内存不足将会导致操作系统内存的Swap。...而且,和我刚才说的 AOF 日志文件读写使用 fsync 线程不同,swap 触发后影响的是 Redis 主 IO 线程,这会极大地增加 Redis 的响应时间。...因此增加机器的内存或者使用Redis集群能够有效的解决操作系统内存的Swap,提高性能。 10....mem_fragmentation_ratio = used_memory_rss/ used_memory used_memory_rss 是操作系统实际分配给 Redis 的物理内存空间,里面就包含了碎片

    51320

    Redis中的String,为什么不好用了?

    但是,随着图片数据量的不断增加,我们的 Redis 内存使用量也在增加,结果就遇到了大内存 Redis 实例因为生成 RDB 而响应变慢的问题。...为了表示字节数组的结束,Redis 会自动在数组最后加一个“\0”,这就会额外占用 1 个字节的开销。**len**:占 4 个字节,表示 buf 的已用长度。...因为 Redis 的数据类型有很多,而且,不同数据类型都有些相同的元数据要记录(比如最后一次访问的时间、被引用的次数等),所以,Redis 会用一个 RedisObject 结构体来统一记录这些元数据,...dictEntry 结构中有三个 8 字节的指针,分别指向 key、value 以及下一个 dictEntry,三个指针共 24 字节,如下图所示:但是,这三个指针只有 24 字节,为什么会占用了 32...按照这种设计方法,我在 Redis 中插入了一组图片 ID 及其存储对象 ID 的记录,并且用 info 命令查看了内存开销,我发现,增加一条记录后,内存占用只增加了 16 字节,如下所示:127.0.0.1

    41511

    Redis 内存优化在 vivo 的探索与实践

    【used_memory_rss】:Redis 主进程占据操作系统的内存(单位是KB),是从操作系统角度得到的值,如top、ps等命令。...,且同时扩容后的内存还在涨,很快又要触发告警了,业务 DBA 去查监控看看具体原因。...4.2 从节点内存异常增长案例 线上 Redis 集群出现内存使用率超过 95% 的灾难告警,但是该集群是有190个节点的集群触发异常内存告警的只有3个节点。...最后还有1个问题:上面的used_memory为什么会比memory_rss的值还大呢?(swap是关闭的)。...这是因为jemalloc内存分配一开始其实分配的是虚拟内存只有往分配的page页里面写数据的时候才会真正分配内存,memory_rss是实际内存占用,used_memory其实是一个计数器,在 Redis

    72340

    redis超时原因系统性排查

    需要把所有数据都保存在内存中的情况是非常罕见的。 一些进程会产生大量的读写I/O。因为文件通常都有缓存,这往往会导致文件缓存不断增加,然后产生交换(swap)。...,要么给机器增加内存,要么不要在同一个机器上运行其他消耗内存的程序。...如果fsync 耗时过长(译者注:超过了2秒),即使fsync 还在进行redis也会执行写操作,这就会造成延迟。...,而且生产环境一般也不会用虚机去跑比较重要而且吞吐比较高的redis吧,除非是真穷了,这样说来超时的原因其实就很小了。...那么问题来了,为什么会这样呢?运维和用户之间的沟通太少,彼此之间你不懂我我不懂你,所以造成的redis本身的误用、滥用。

    8.1K61

    关于redis性能问题分析和优化,看这篇就够了

    因为32位实例上的指针大小只有64位的一半,它的内存空间占用空间会更少些。这有一个坏处就是,假设物理内存超过4GB,那么32位实例能使用的内存仍然会被限制在4GB以下。...如果Redis占用内存超出系统可用内存,操作系统会把Redis进程的一部分数据,从物理内存交换到硬盘上,内存交换会明显的增加延迟时间。...used_memory_rssrss是Resident Set Size的缩写,表示该进程所占物理内存的大小,是操作系统分配给Redis实例的内存大小。...如果used_memory_peak和used_memory_rss的值大致上相等,而且二者明显超过了used_memory值,这说明额外的内存碎片正在产生。...内存交换会严重影响Redis的性能,所以应该增加可用物理内存或减少实Redis内存占用。可查看used_memory章节的优化建议。

    2.6K31

    TIME_WAIT引起Cannot assign requested address报错

    used_memory_rssrss是Resident Set Size的缩写,表示该进程所占物理内存的大小,是操作系统分配给Redis实例的内存大小。...如果used_memory_peak和used_memory_rss的值大致上相等,而且二者明显超过了used_memory值,这说明额外的内存碎片正在产生。...因为32位实例上的指针大小只有64位的一半,它的内存空间占用空间会更少些。 这有一个坏处就是,假设物理内存超过4GB,那么32位实例能使用的内存仍然会被限制在4GB以下。...内存交换会严重影响Redis的性能,所以应该增加可用物理内存或减少实Redis内存占用。 5....若是maxmemory已经设置为推荐的阀值后,增加maxmemory限制不但无法提升性能,反而会引发内存交换,导致延迟增加、性能降低。

    1.7K20

    Redis 为什么好用?

    一、导言 如果你从来没使用过 Redis 数据库,那你肯定会问,为什么我们要学 Redis数据库,我只使用 MySQL 或 Oracle 就够了。...由于 Redis 是开源的,当你打开源代码,就会发现 Redis 都是用 C 语言写的,C 语言是最接近计算机语言的代码,而且只有区区 5 万行,保证了 Redis 的速度。...分别支持哈希、集合、BitMaps,还有位图(多用于活跃用户数等统计)、HyperLogLog(超小内存唯一值计数,由于只有 12K,是有一定误差范围的)、GEO(地理信息定位)。...Redis 最大的作用是增加你原来的访问性能问题,试想如果项目已经搭建好,这个项目一般是不太可能更换的。但是 Redis 独特的存在是只需要增加一层,把常用的数据存放在 Redis 即可。...你也可以做些更有趣的事情,比如一个旋转更新的 RSS Feed 队列。 4. 排行榜及相关问题。实际就是一种有序集合。

    61120

    一次关于k8s kubectl top 和 contained ps 不一致的问题探究

    此时大家还在为新业务冲刺,猜测也许是业务代码问题,但没有调整代码去尝试解决。...再后面,出过几次OOM的问题,普遍增加了容器限额 Limits,出现了好几个业务服务是内存小怪兽,因此如果不限制的话,服务过度占用会导致驱逐,因此反馈语也就变成了:“为什么你们的服务内存占用这么高,老被...应用内存占用 17 G之多,那很显然,并不是这个进程在捣鬼,但整个容器里面确实就只有这个进程在运行着,并且该 Java 进程还设置了分配内存的限制,最大不会超过 4g,可是内存还是一直在涨。 ?...top命令 小TIPS: RSS、VSZ指标相关的参数含义: RSS是Resident Set Size(常驻内存大小)的缩写,用于表示进程使用了多少内存(RAM中的物理内存),RSS不包含已经被换出的内存...RSS包含了它所链接的动态库并且被加载到物理内存中的内存RSS还包含栈内存和堆内存。 VSZ是Virtual Memory Size(虚拟内存大小)的缩写。

    3.4K41

    Redis删除数据后,为什么内存占用率还是很高?

    ,问题如下:Redis做了数据删除操作,为什么使用top命令时,Redis还是占了很多内存?...而 used_memory_rss 记录着在操作系统角度,Redis进程占用的物理总内存这样看来文章好像讲完了,开头就知道答案,当然不是,内容多着呢~文章将从下面这些点分析扩展你对于Redis内存方面的知识点...,代表内存碎片率mem_fragmentation_ratio:2.79used_memory_rss:操作系统分配给 Redis 进程的内存空间(包含内存碎片占用的空间),此数据结果约等于top、ps...如下图:添加图片注释,不超过 140 字(可选)各数据占用内存字节空间分别是A:2、B:1、C:3、D:3此时D释放了一个字节空间A修改了数据,增加了一个字节。...朋友,希望本文对你有帮助~欢迎点赞 、收藏 、关注 三连支持一下~知道的越多,不知道的也越多,我是小许,下期见~参考:Redis删除数据后,为什么内存占用率还是很高?

    642101

    Redis开发与运维学习笔记---(13)

    :1.95M used_memory_rss:3198976 used_memory_peak:3089264 used_memory_peak_human:2.95M used_memory_lua:...,也就是内部存储所有内存占用量; used_memory_human:上述指标的易读模式 used_memory_rss:从操作系统角度显示的Redis进程占用的物理内存总量 used_memory_peak...:内存使用的最大值,也就是峰值 used_memory_lua:Lua引擎所消耗的内存大小 mem_fragmentation_ratio:used_memory_rss/used_memory的比值,...通常used_memory_rss只有3MB左右,used_memory在800kb左右,空的Redis进程消耗的内存可以忽略不记。...2、我们可以通过config set maxmemory进行动态修改内存参数,当单机多实例上内存满载的时候,一个redis实例增加了maxmemory,另一个redis实例要对应减少maxmemory

    53120
    领券