1、Redis内存碎片是如何形成的
一是内存分配器的分配策略,内存分配器一般是按固定大小来分配内存,而不是按实际使用大小来分配。例如8字节、16字节、32字节...,2KB,4KB,8KB等,按程序申请时最接近某个固定值。
二是Redis键值大小不一和删改操作,Redis申请内存分配空间时,本身就会有键值大小不一的空间需求,然后这些键值会被修改和删除,如修改变大或变小,就需要额外占用空间或释放不用的空间。Redis删除键值也会释放内存空间,形成空闲内存。
如图所示内存碎片形成:
大量内存碎片的存在,会造成Redis内存利用率低。
2、如何判断内存碎片
Redis提供了INFO命令,可以利用INFO命令来查询:
INFO memory
# Memory
used_memory:1024000000
used_memory_human:1024.00M
used_memory_rss:1998000000
used_memory_rss_human:1.86G
...
mem_fragmentation_ratio:1.86
mem_fragmentation_ratio 大于1小于1.5时,一般来说是合理的
mem_fragmentation_ratio 大于1.5时,内存碎片率已经超过50%了,这个时候我们就要采取一些措施来降低内存碎片率了。
mem_fragmentation_ratio <