Redis内存_redis内存管理

Redis内存_redis内存管理Redis内存消耗:自身内存 + 对象内存 + 缓冲内存 + 内存碎片 自身内存:Redis进程自身内存占用量很小,大约在3.8M左右。 对象内存:sizeof(keys) + sizeof(val…

Redis内存

Redis内存消耗:自身内存 + 对象内存 + 缓冲内存 + 内存碎片

  1. 自身内存:Redis进程自身内存占用量很小,大约在3.8M左右。
  2. 对象内存:sizeof(keys) + sizeof(values),键和值的内存都需要关注
  3. 缓冲内存:主要包括客户端缓冲、复制积压缓冲区、AOF缓冲区
    • 客户端缓冲:指所有接入到Redis服务器TCP连接的输入输出缓冲,超过1G会自动断开
    • 复制积压缓冲区:用于实现部分复制功能补救措施的缓冲区
    • AOF缓冲区:Redis重写期间保存最近的写入命令,消耗内存取决于AOF重写时间及写入命令量
  4. 内存碎片:Redis默认使用jemalloc分配器、可选glibc、tcmalloc,为了更好的管理和复用内存,一般采用内存块进行分配,通常采用数据对齐或安全重启处理内存碎片超标情况

子进程内存消耗:子进程fork后与父进程享有同一物理内存,AOF/RDB期间父进程处理写请求时会复制出请求的页副本进行写操作,子进程依然读取父进程快照

  1. Redis fork期间产生的子进程需要消耗的内存由持久化期间写入命令量决定
  2. 设置sysctl vm.overcommit_memory = 1允许内存分配所有的物理内存
  3. 排查当前系统是否支持THP,防止copy-on-write期间内存过度消耗

内存管理:Redis通过控制内存上限和回收策略实现内存管理。

  1. 设置内存上限:Redis使用maxmemory参数限制最大可用内存
    • 用于缓存场景,超出上限maxmemory后使用LRU等删除策略释放空间
    • 防止所有内存超过服务器物理内存,需要注意由于内存碎片的存在,实际消耗会比maxmemory更大
  2. 动态调整内存上限
    • 当Redis实例设置maxmemory不合理时,可以通过config set maxmemory进行修改
  3. 内存回收策略
    • 删除到达过期时间的键对象:惰性删除(读取到超时的键就删除,减少TTL的消耗)和定时任务删除(每秒执行十次,根据键的过期比例使用快慢两种方式回收键)
    • 内存溢出控制策略(maxmemory-policy):noeviction(不删除,拒绝写入)、volatile-lru(LRU删除设置了超时时间的属性)、allkeys-lru(LRU删除不管超时)、allkeys-random(随机删除所有键)、volatile-random(随机删除过期键)、volatile-ttl(根据对象的ttl属性删除即将过期的数据)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/6814.html

(0)
上一篇 2023-04-01
下一篇 2023-04-01

相关推荐

  • Ubuntu 服务器安装 MySQL 远程数据库[亲测有效]

    Ubuntu 服务器安装 MySQL 远程数据库[亲测有效]在 Web 项目中,我们需要使用到远程数据库,开发阶段也需要连接并查看数据库的状况。腾讯云、阿里云等云平台提供了远程数据库,可直接使用;当然也可以自己在部署 Web 的服务器上安装数据库,将其配置为远

    2023-05-31
    150
  • 学习如何在Python中使用正则表达式

    学习如何在Python中使用正则表达式正则表达式是一个强大的工具,可以帮助你在Python中搜索、匹配、替换和分割字符串。

    2024-05-16
    70
  • 实时计算框架:Flink集群搭建与运行机制

    实时计算框架:Flink集群搭建与运行机制Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。Flink被设计在所有常见的集群环境中运行,以内存执行速度和任意规模来执行计算。主要特性包括:批流一体化、精密的状态管理、事

    2023-04-15
    160
  • Python字典快速合并技巧

    Python字典快速合并技巧字典是Python语言中非常重要的数据类型,它能够存储任何类型的对象,而且能够通过键值对的形式快速查找对象。有时候,在处理一些复杂的数据结构时,我们可能需要将多个字典合并到一起,这时候就需要一些高效的技巧来实现这个操作。

    2024-04-07
    77
  • MySQL数据库:合并结果集「建议收藏」

    MySQL数据库:合并结果集「建议收藏」合并结果集 union 合并结果集 对合并后的结果集中的重复数据也会自动去重 如果不想去重 则使用 union all

    2022-12-21
    145
  • oracle基础知识_oracle数据库asm

    oracle基础知识_oracle数据库asm1 概念 磁盘管理系统 类似于linux的LMV 负责底层存储与操作系统的交互,属于磁盘管理功能 2 具体构成图 两个ASM实例->RAC共享存储 RAC共享存储->多个 asm disk grou…

    2023-04-09
    145
  • 使用Python进行字符串编码操作

    使用Python进行字符串编码操作编码是将文本数据转换成计算机能够处理的二进制数据的过程。计算机只能理解二进制数据,而不能理解字符集中的字符。因此,需要将字符集中的字符转换成对应的二进制数据,才能被计算机所处理。

    2024-02-16
    84
  • mysql服务被关闭_MySQL死锁

    mysql服务被关闭_MySQL死锁看到这个 故障分析 | MySQL OOM 故障应如何下手,想起来几天前也遇到一次MySQL服务因为OOM被杀掉的情况,记录一下 背景:一个测试环境,由于Centos系统上没有设置虚拟内存,

    2023-02-22
    161

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注