19、内存模型

1、内存统计
查看内存:

127.0.0.1:6379> info memory
# Memory
used_memory:689408
used_memory_human:673.25K
used_memory_rss:652472
used_memory_rss_human:637.18K
used_memory_peak:766384
used_memory_peak_human:748.42K
total_system_memory:0
total_system_memory_human:0B
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:0.95
mem_allocator:jemalloc-3.6.0

  used_memory:redis分配器分配的内存总量(单位是字节),包括虚拟内存(swap,使用硬盘代替内存)
  used_memory_rss:redis进程占据操作系统的内存。除了分配器分配的内存,还包括了进程运行本身需要的内存、内存碎片等,但不包含虚拟内存。
  used_memory_peak:内存使用的最大值。use_memory
  used_memory_lua:lua引起消耗的内存大小
  mem_fragmentation_ratio:内存碎片率(used_memory_rss/used_memory)。如果该值大于1,说明有部分内存并没有用于数据存储,而是被内存碎片所消耗,值越大,内存碎片就越严重。如果值小于1,这种情况一般是操作系统把redis内存交换(swap)到硬盘所致,由于硬盘性能远远低于内存,会导致redis的性能变得很差。
  mem_allocator:redis使用的内存分配器,在编译时指定,可以值有libc 、jemalloc或者tcmalloc,默认是jemalloc

在这里插入图片描述

  对象内存:存储用户的所有数据。Redis 所有的数据都采用 key-value 数据类型,每次创建键值对时,至少创建两个类型对象:key 对象和 value 对象
  缓冲内存:客户端缓冲、复制积压缓冲、AOF重写缓冲
    客户端缓冲:分为输入和输出缓冲区。
      输入缓冲区:无法控制,最大空间为1G,超过断开连接。
      输出缓冲区:可以通过client-output-buffer-limit设置。
    复制积压缓冲区:用于实现主从的部分复制功能。可以通过repl-backlog-size设置,默认1M。
    AOF重写缓冲区:用于保存AOF重写期间的写命令
  内存碎片:内存碎片是Redis在分配、回收物理内存过程中产生的。例如,如果对数据的更改频繁,而且数据之间的大小相差很大,可能导致redis释放的空间在物理内存中并没有释放,但redis又无法有效利用,这就形成了内存碎片。内存碎片不会统计在used_memory中。
  如果Redis服务器中的内存碎片已经很大,可以通过安全重启的方式减小内存碎片:因为重启之后,Redis重新从备份文件中读取数据,在内存中进行重排,为每个数据重新选择合适的内存单元,减小内存碎片。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值