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

          

memcached 高级机制(一)的更多相关文章

  1. memcached 高级机制(二)

    memcached删除机制 a) (1)有内存机制里说明了,这里会运用到LRU删除机制.我们知道,当我们在add或set一个值时,我们会设置这个值得期限.当某个值过期后,这个值并没有从内存中删除,我们 ...

  2. memcached学习笔记6--浅谈memcached的机制 以及 memcached细节讨论

    附:请浅谈memcached的机制 答: ①基于C/S架构,协议比较简单 c/s架构,此时memcached为服务器端,我们可以使用如PHP,c++/c等程序连接memcached服务器. memca ...

  3. MemCached高级缓存

    MemCached高级缓存配置 Memcache相关介绍: memcache 是一个高性能的分布式的内存对象缓存系统,它能够存储各种各样的的数据,包括图片,视频,文件等等.缓存功能. DB.数据源-- ...

  4. Memcached存储机制

    Memcached存储机制 memcached 内存管理 分析(转) 缓存.缓存算法和缓存框架简介 memcached全面剖析–PDF总结篇

  5. 04 Memcached过期机制与删除机制

    一:Memcached过期机制(1)当某个值过期后,并没有从内存删除,因此stats统计时,curr_item有气信息.(2)如果之前有没有get取其值时,将不会自动删除.当某个新值去占用他的位置的时 ...

  6. 四,memcached的机制

    memcached机制: 1,基于c/s架构,协议简单. (1)c/s架构,此时memcached为服务端,我们可以使用如PHP,c/c++等程序连接memcached服务器. (2)memcache ...

  7. memcached缓存机制+微软缓存机制使用详解

    1. why Memcached 1.1   一台web服务器上,iis接收的请求数是有限的,当访问量超大的时候,网站访问就会遇到瓶颈了,处理方式就是运用多了服务器把请求数分流(集群),对外公布的就一 ...

  8. [PHP]MemCached高级缓存

    Memcache Win32 的安装下载:Memcache Win32 [www.php100.com]   [www.jehiah.cz/projects/memcached-win32/] 1.解 ...

  9. PHP MemCached高级缓存配置图文教程

    memcache是一个高性能的分布式的内存对象缓存系统,它能够用来存储各种格式的数据,包括图像.视频.文件以及数据库检索的结果等.     1.Memcache相关介绍 memcache是一个高性能的 ...

随机推荐

  1. Eclipse 透视图(Perspective)

    什么是透视图? 透视图是一个包含一系列视图和内容编辑器的可视容器.默认的透视图叫 java. Eclipse 窗口可以打开多个透视图,但在同一时间只能有一个透视图处于激活状态. 用户可以在两个透视图之 ...

  2. jQuery EasyUI编辑DataGrid用combobox实现多级联动

    我在项目中设计课程表的时候需要用到老师和分类之间的多级联动. 首先是一张效果图: 下面是实现的代码: <body> <script type="text/javascrip ...

  3. Linux虚拟机安装完centos后环境配置

    linux下面安装软件 yum install rpm -ivh 编译安装 三部曲:./configure make make install 卸载 rpm -e 安装方法 1)通过yum安装软件 需 ...

  4. 使用yum 出现 Loaded plugins: fastestmirror

    使用yum 安装是出现 : Loaded plugins: fastestmirror [root@localhost yum.repos.d]# yum –y install httpd  http ...

  5. C++ 基础知识回顾(string基础、智能指针、迭代器、容器类)

    [1] string基础 [1.1] string 的构造 #include <iostream> #include <string> int main() { using n ...

  6. idea 不能编译生成class文件

    问题:开发工程中将idea中编译输出目录 out 删掉.发现再次编译不能生成class文件 解决方案:settings -> compiler 勾选自动编译选项

  7. eclipse下设置tomcat,修改Java代码不必重启tomcat

    1.本文目的:用tomcat进行web开发时,修改Java代码往往要重启代码,当工程较大启动较慢时,严重影响效率,本文通过eclipse下tomcat开发和发布web程序时,对一些Java代码一般修改 ...

  8. 巨蟒python全栈开发django7:多表增加和查询

    1.回顾内容&&补充 补充1: 补充2: 这个选择的是第二个解释器. 选择第一个的话,只是针对当前的项目,如果再开新项目的话,需要重新下载安装相关的包. 点击保存,因为我们注释掉了,创 ...

  9. Springboot中读取自定义名称properties的

    Springboot读取自定义的配置文件时候,使用@value,一定要指定配置文件的位置!  否则报错参数化异常!

  10. C# 函数2

    //读写INI     public class GF_INI     {         [DllImport("kernel32")]         private stat ...