你的位置:首页 > 数据库

[数据库]memcached 高级机制(一)


memcached的高级机制

memcached内存机制

(1)我们知道操作系统对进程的处理方法,在多进程并发的操作系统中,程序的执行不可避免的会产生碎片。同样对于memcached,在存储value,key时也会出现同样的问题, memcached采用了一种叫做slab alloction 的分配机制来尽量防止内存碎片化。下面来详解一下关于slab  alloction机制。

                                                                             

    如上图:

        假设我们的内存为10M,首先将10M的内存分为4块,我们可以得出每块的大小为2.5M,即上面绿色的部分(slab1),我们称每个slab叫做slab  class,  将第一

      块再继续分,将slab1分成每块100Byte的小块,(即上面蓝色的部分),我们称每个小的蓝色的块叫做chunk。以此类推,把每一个slab按此规律进行切割。比如:

      将slab2分成每个150Byte的chunk,把slab3分成每个250Byte的chunk,…………。

    举个栗子:

        >add  person  0   0    4

        >kobe

          STORED

      当成功存储后,kobe这个value会存储在slab1中的一个chunk中,当再来一个值是会继续放在刚才存储kobe的chunk 中;当存储一个130byte的value时,,会在       slab2里找到一个chunk存储进去。总之slab  alloction 机制会根据value的大小分配chunk。我们尽量减少内存碎片的数量,但这种情况是不可避免的。

 

    warning:

         Grow factor    <增长因子>

       增长因子:每个相邻slab中的chunk的比值。mamcached默认的增长因子是1.25

       这里还有一个问题就是,如果需要存储一个120Byte的value,但此时150Byte的chunk已经用完了。memcached的机制并不是去占用250Byte的chunk,而是把                          slab2中150Byte中的数据踢出去。其中用的算法就是操作系统中经典的算法 (LRU最近最久未使用算法);