• 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最近最久未使用算法);

              

                           

  • 相关阅读:
    Sql inner join
    转:MySQL 的show processlist
    session cookie
    集群和分布式
    设计模式
    Web性能优化——缓存
    关于 java 里面的路径
    1分钟看懂log4j 配置自己想要的日志信息
    spring @bean 的理解
    如何用iptables实现NAT(转)
  • 原文地址:https://www.cnblogs.com/dormant/p/4928640.html
Copyright © 2020-2023  润新知