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.0used_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重新从备份文件中读取数据,在内存中进行重排,为每个数据重新选择合适的内存单元,减小内存碎片。