标签:
要很好的使用Memcached,那么必须知道我们的数据交给Memcached,它是怎么处理它们的。为了说明这个,需要先了解几个名词:slab class,page,chunk。它们三者之间的关系如下:
通过上面可以看到slab class 1中一个page能够存储的item数量是最多的,而最后一个slab class一个page只能存储一个item。这是由于第一个slab class 1的chunk大小是所有slab class中最小的,那么对于就导致了slab class 1的能够存储的item最多了。
memcached这样做的好处什么呢?memcached这样做将数据存储根据能够存储的大小归为几类,并且内存按照固定的大小来划分。相比于随机分配内存大小,导致内存碎片难于回收来说,这种内存方案对内存的利用率更高,而且便于管理。这就是memcached的slab allocation。
对于memcached来说,如果一个item申请写入数据,会计算当前item的大小然后加上memcached的item结构体大小,判断具体是存储在哪个slab class上面。判断的条件是item_size+item_structure_size<=某个slab class上的chunk大小。以上面的图来说,比如我需要写入一个54byte的数据(key+value),由于memcached的item结构体大小是48,那么memcached对于这个item需要写入的总数据大小是100byte,于是就会写入slab class2的某个chunk里面。于是就会存在下面的情况:
由于slab class2的chunk大小是112byte,那么写入100byte数据,就会有12byte空间浪费。这就是下一个话题,如何能够让memcached充分使用内存。
上面列举的例子可以看出如何chunk大小设置不合适会导致内存空间的浪费,如何让memcached合理的使用内存呢?下面将介绍设置哪些参数来达到根据具体的业务合理的使用内存。
标签:
原文地址:http://my.oschina.net/u/2368584/blog/506767