MemCache中的内存管理详解

  MC的内存管理机制

  1.内存的碎片化

  当我们使用C语言或者其他语言进行malloc(申请内存),free(释放内存)等类似的命令操作内存的时候,

  在不断的申请和释放的过程中,形成了一些很小的内存片段,我们无法继续的利用,

  那这种空闲,无法继续利用内存的情况,我们称之为内存的碎片化

  2.MC管理内存的方法

  MC使用slab allocator的机制来管理内存

  原理:预告将内存划分成数个slab class的仓库 //默认是64

MemCache中的内存管理详解

各个仓库 切分成不同尺寸的小块(chunk)

  需要存放内容的时候,先判断内容的大小,为其选取合理的仓库存放

MemCache中的内存管理详解

  3.MC如何选择合适的chunk?

  MC会根据收到的数据的大小,选择最合适数据大小的chunk组(slab class)

  MC中保存着slab class内空闲chunk的列表,根据列表选择空的chunk,然后将数据缓存其中即可

MemCache中的内存管理详解

  但是,假如有100字节的内容要存,但122大小的仓库的chunk满了,

  他并不会寻求更大的,比如说144字节的

  只会将122字节的仓库中的旧数据剔除,然后再加入进来(最近最少使用算法)

  

  4.固定大小的chunk带来的内存浪费

  由于slab allocate机制中,分配的chunk的大小是固定的,因此,对于特定的item,可能更会造成内存的浪费

  比如说,将100字节的数据缓存到122字节的chunk中,剩余的22个字节就浪费了

MemCache中的内存管理详解

对于chunk空间的浪费问题,无法彻底的解决,只能缓解该问题

  如何解决这个问题呢?

  grow factor 增长因子 通过启动增长因子,默认是1.25,可以指定。在启动memcache的时候,根据我们要存的键值对的大小,来指定-f的大小

MemCache中的内存管理详解

原文链接:http://www.maiziedu.com/wiki/memcache/memory/

上一篇:AngularJs:Service、Factory、Provider依赖注入使用与区别


下一篇:HTTPS加密那点事-对称、非对称加密、数字证书