xianbei notes

世界因我而变

导航

随笔分类 -  C/C++

摘要:slab是memcache用来管理item的内容存储部分。 分配内存时,memcache把我们通过参数m设置的内存大小分配到每个slab中 1、slab默认最多为200个,但是由于item的最大为1MB,而且每个slab里面存储的item的尺寸是根据factor来确定的,所以能够分配的slab的个数小于200。 2、关于增长因子factor参数(配置时参数名为f),默认为1.25,即每个slab所能存储的item的大小是根据factor的大小来变化的。 3、每个slab中含有一个或多个trunk,trunk中存储的就是item,item的最大为1M,所以trunk最大为1M 4、每个slab. 阅读全文

posted @ 2011-02-26 21:19 先贝 阅读(4242) 评论(4) 推荐(2)

摘要:items是memcache用来管理item的封装,采用的hash表和LRU链的形式,关于hash表的操作见我前几天的文章 memcache源码分析之assoc  关于item内容的存储机制简介  item的内容存储是在slab中管理的,为了对内存进行有效的管理,slab采用的是分桶的大小来存储item的内容的,简单举例解释一下,初始化时会有不同块大小的桶,比如桶1里面的内存块都是80b的,专门用来存储item内容大小接近80b的。桶2的内存块是100b的,专门用来存储内容大小接近100b的item,桶3是120b的,用来存储大小接近120b的item,等等。所以,如果有一个item的内容大小 阅读全文

posted @ 2011-01-18 00:14 先贝 阅读(6267) 评论(1) 推荐(3)

摘要:memcache对item信息的存储是采用的hash表的形式,而item的内容则是存储在slab中,本篇文章只介绍item在hash表中的存储。关于slab的存储介绍请关注后续文章。 item经过hash后存储在一个桶中,这个桶是hash表的一个元素,在同一个桶中,item是通过链表来存储的。 这部分的初始化工作在memcached.c的main函数中,初始化时,分配了2^16个元素的hash表,如果hash表比较大了,需要重新申请内存扩充。 那什么时候需要扩充呢,当每个item被加入到hash表中时,程序会去计算item的数量,如果item的数量大于2^16的1.5倍,即开始扩充,这部分的代 阅读全文

posted @ 2011-01-10 00:20 先贝 阅读(4926) 评论(3) 推荐(4)

摘要:考虑了同事们提出的意见,增加了对代码的分析,有些写错的地方一并修改过来。 一直想把memcache源代码读完再写文章,结果由于项目紧,没有电脑等原因,进行的一直断断续续,效果很差。所以改成分模块来写。 这篇文章是关于stats的。但是并不是memcache平常使用的stats命令,而是facebook的一个牛人增加的关于键的命名空间的stats代码(大家不要混淆:)),也就是说你可以把各种要存储的键名前面加个前缀(prefix),来标识一定的命名空间,这样各种键名字在本命名空间里面是不能重复的(当然也可以重复,但是会把过去的覆盖,:)),但是在整个memcache里面可以重复设置,通过这段代码 阅读全文

posted @ 2011-01-02 20:33 先贝 阅读(2183) 评论(2) 推荐(0)