Memcache内存管理原理
内存的碎片化 C语言中,直接malloc,free 来向操作系统申请和释放内存时,不断的申请和释放过程中,形成了一些很小的内存片段,无法再利用。这种无法利用内存的现象—称之为内存的碎片化。 Memacache如何克服内存碎片化 memcached 用slab allocator 机制来管理内存。 原理:预先把申请到的内存划分成数个slab class仓库(即不同尺寸的小块) 如下图所示 需要内存时,判断内容大小,为器选择合理的块。 备注:如果选到的块为100byte,而内容为80byte,那么20byte,是无法利用的(即浪费了) , 如果100byte已经满了,不会寻找更大的120byte的仓库存储,会把相应的100byte的仓库中的旧数据剔除掉。 Memcached 增长因子 memcached在启动时,可以通过-f选项指定Growth Factor因子,并在某种程度上控制slab之间的差异。(默认值:1.25) Memcache的删除机制 当某个值过期后,并没有从内存删除,因此,stats统计时,curr_item有其信息 当某个新支去占用他的位置时,当成空chunk来占用 当get值时,判断是否过期,如果过期,返回空,并且清空,curr_item就减少了。 备注:过期,只是用户看不到这个数据而已,并没有在过期的瞬间立即从内存删除。这个称为lazy expiration