Redis 之内存

内存使用统计命令: info memory
Redis 之内存

属性说明:

  • used_memory:Redis分配器分配的内存总量(单位是字节),也就是内部存储的所有数据内存占用量。used_memory_human只是显示更友好。
  • used_memory_rss:从操作系统的角度显示Redis进程占用的物理内存总量。
  • mem_fragmentation_ratio:内存碎片比率,该值是used_memory_rss / used_memory的比值。
    当mem_fragmentation_ratio>1时,说明used_memory_rss-used_memory多出的部分内存并没有用于数据存储,而是被内存碎片所消耗,如果两者相差很 大,说明碎片率严重。
    当mem_fragmentation_ratio<1时,这种情况一般出现在操作系统把 Redis 内存交换(Swap)到硬盘导致,出现这种情况时要格外关注,由于硬盘速度远远慢于内存,Redis性能会变得很差,甚至僵死。

内存消耗图:
Redis 之内存

  • 对象内存:是Redis内存占用最大的一块,存储着用户所有的数据。
  • 缓冲内存:客户端缓冲、复制积压缓冲区、AOF缓冲区。
  • 内存碎片:容易出现高内存碎片场景,频繁做更新操作,大量过期键删除,键对象过期删除后,释放的空间无法得到充分利 用,导致碎片率上升。重启节点可以做到内存碎片重新整理,因此可以利用高可 用架构,如Sentinel或Cluster,将碎片率过高的主节点转换为从节点,进行 安全重启。

设置内存上限:
使用maxmemory参数限制最大可用内存。
maxmemory限制的是Redis实际使用的内存量,也就是 used_memory 统计项对应的内存。
当超出内存上限maxmemory时使用LRU等删除策略释放空间。
Redis默认无限使用服务器内存,为防止极端情况下导致系统内存耗尽,建议所有的Redis进程都要配置maxmemory。

内存回收策略:

  • 删除到达过期时间的键对象。
  • 内存使用达到maxmemory上限时触发内存溢出控制策略。