转自:原链接
Memcached内存管理采取预分配、分组管理的方式,分组管理就是划分slab class,按照chunk的大小slab被分为很多种类。
 

slab

  1. Slab是一个内存块,它是memcached一次申请内存的最小单位。
  2. 在启动memcached的时候一般会使用参数-m指定其可用内存,但是并不是在启动的那一刻所有的内存就全部分配出去了,只有在需要的时候才会去申请,而且每次申请一定是一个slab。
  3. Slab的大小固定为1M(1048576 Byte),一个slab由若干个大小相等的chunk组成。每个chunk中都保存了一个item结构体、一对key和value。
chunk
  1. 同一个slab中chunk的大小相等的,但是在不同的slab中chunk的大小并不一定相等.
  2. 在memcached中按照chunk的大小不同,可以把slab分为很多种类(class)
新增item
  1. 向memcached添加一个item时候,memcached首先会根据item的大小,来选择最合适的slab class。
  2. 例如item的大小为190字节,默认情况下class 4的chunk大小为160字节显然不合适,class 5的chunk大小为200字节,大于190字节,因此该item将放在class 5中(显然这里会有10字节的浪费是不可避免的)。
  3. 计算好所要放入的chunk之后,memcached会去检查该类大小的chunk还有没有空闲的,如果没有,将会申请1M(1个slab)的空间并划分为该种类chunk。
分布式/hash
  1. memcached本身是集中式的缓存系统,要搞多节点分布,只能通过客户端实现:
  2. 1.hash结果
  3. 2.一致性hash
Memcached 的item保存基于一个大的hash表,它的实际地址就是slab中的chunk偏移,但是它的定位是依靠对key做hash的结果,在 primary_hashtable中找到的。在assoc.c和items.c中定义了所有的hash和item操作
链接数
  1. Memcached 使用libevent库实现网络连接服务,理论上可以处理无限多的连接,但是它和Apache不同,它更多的时候是面向稳定的持续连接的,所以它实际的并 发能力是有限制的。在保守情况下memcached的最大同时连接数为200,这和Linux线程能力有关系,这个数值是可以调整的。
启动过程
  1. 1 、调用 settings_init() 设定初始化参数
  2. 2 、从启动命令中读取参数来设置 setting 值
  3. 3 、设定 LIMIT 参数
  4. 4 、开始网络 socket 监听(如果非 socketpath 存在)( 1.2 之后支持 UDP 方式)
  5. 5 、检查用户身份( Memcached 不允许 root 身份启动)
  6. 6 、如果有 socketpath 存在,开启 UNIX 本地连接(Sock 管道)
  7. 7 、如果以 -d 方式启动,创建守护进程(如上调用 daemon 函数)
  8. 8 、初始化 item 、 event 、状态信息、 hash 、连接、 slab
  9. 9 、如设置中 managed 生效,创建 bucket 数组
  10. 10 、检查是否需要锁定内存页
  11. 11 、初始化信号、连接、删除队列
  12. 12 、如果 daemon 方式,处理进程 ID
  13. 13 、event 开始,启动过程结束, main 函数进入循

memcache细节解析的更多相关文章

  1. 基于Hi3559AV100 RFCN实现细节解析-(2)RFCN数据流分析

    下面随笔系列将对Hi3559AV100 RFCN实现细节进行解析,整个过程涉及到VI.VDEC.VPSS.VGS.VO.NNIE,其中涉及的内容,大家可以参考之前我写的博客: Hi3559AV100的 ...

  2. 基于Hi3559AV100 RFCN实现细节解析-(3)系统输入VI分析一 :

    下面随笔系列将对Hi3559AV100 RFCN实现细节进行解析,整个过程涉及到VI.VDEC.VPSS.VGS.VO.NNIE,其中涉及的内容,大家可以参考之前我写的博客: Hi3559AV100的 ...

  3. 基于Hi3559AV100 RFCN实现细节解析-(3)系统输入VI分析(HiISP)二 :

    下面随笔系列将对Hi3559AV100 RFCN实现细节进行解析,整个过程涉及到VI.VDEC.VPSS.VGS.VO.NNIE,其中涉及的内容,大家可以参考之前我写的博客: 基于Hi3559AV10 ...

  4. [腾讯云]简单在腾讯云 CenTOS7.0 安装Nginx,Mysql(MariaDB),Memcache,解析PHP!

    1.安装LNMP之前要安装EPEL,以便安装源以外的软件,如Nginx,phpMyAdmin等. yum install epel-release 2.安装Nginx a) yum install n ...

  5. go-admin在线开发平台学习-4[细节解析]

    紧接着上一期的内容,继续对go-admin的一些细节进行解析. 通用的增删改查方法 在go-admin/common/actions下封装了通用的增删改查方法.在对这些方法进行说明前,先移步到另一个文 ...

  6. 基于Hi3559AV100 RFCN实现细节解析-(1)VGS初介绍

    下面随笔系列将对Hi3559AV100 RFCN实现细节进行解析,因为RFCN用到了VGS加框,因此本篇随笔将给出VGS视频图像子系统的具体说明,便于后面RFCN的细节实现说明. VGS 是视频图形子 ...

  7. word2vec 细节解析1

    count.extend(collections.Counter(list1).most_common(2))表示:使用collections.Counter统计list1列表重单词的频数,然后使用m ...

  8. 【转载】LR - 细节解析,为什么LR脚本会去访问“脚本中不存在的“资源?

    问题描述 同事遇到的一个问题,LR执行性能测试脚本时,总报出错误,无法访问一个图片的地址,但脚本中明明没有对该资源的请求. Action4.c(12): Warning -27796: Failed ...

  9. go-admin在线开发平台学习-3[细节解析]

    本章节主要的内容是对go-admin中的一些有趣编码进行分析,为自己以后提供一些借鉴 使用cli方式启动项目 使用cobra[眼镜蛇]完成强壮cli的工具,确保稳定. 使用cli的方式启动项目的好处显 ...

随机推荐

  1. Hibernate 系列教程5-双向多对一

    主要讲解inverse和cascade的用法 cascade定义的是关系两端对象到对象的级联关系: 而inverse定义的是关系和对象的级联关系(管理外键的值). inverse 属性默认是false ...

  2. linux的学习系列 1---简介

    Linux简介 严格的来讲,Linux 不算是一个操作系统,只是一个 Linux 系统中的内核,即计算机软件与硬件通讯之间的平台:Linux的全称是GNU/Linux,这才算是一个真正意义上的Linu ...

  3. Jmeter的优点是什么?除了轻量级,它和LoadRunner有什么本质区别

    1.jmeter的架构和loadrunner原理一样,都是通过中间代理,监控和收集并发客户端发出的指令,把他们生成脚本,再发送到应用服务器,再监控服务器反馈结果的一个过程: 2.分布式中间代理功能在j ...

  4. c# 获取客户端ip

    针对 HttpContext.Current.Request.UserHostAddress 如果客户使用的是代理,将获取不到真是的ip 要想透过代理服务器取得客户端的真实IP地址,就要使用 Requ ...

  5. VC与ADO数据库操作

    VC与ADO数据库操作 学研部的同志们,大家好! 想开一次学习会,实习时间冲突了,只好把文档发给大家看了.重点推荐李振龙的BMP读图教程! 尤其是大三GIS班的同志,注意了,可能实习用得上的! 一.A ...

  6. 英文SEO外部链接资源收集之常用的footprints

      inurl:/privacy-policy "Using Article Directory plugin"inurl:/terms "Using Article D ...

  7. WordPress安装到zen-cart产品页中

    把WordPress安装到zen-cart一个子目录里吧,设置好固定连接等这个文件/includes/templates/template_default/templates/tpl_product_ ...

  8. python socket编程---从使用Python开发一个Socket示例说到开发者的思维和习惯问题

    今天主要说的是一个开发者的思维和习惯问题. 思维包括编程的思维和解决一个具体问题的分析思维,分析思路,分析方法,甚至是分析工具. 无论是好习惯还是不好的习惯,都是在者一天一天的思维中形成的.那些不好的 ...

  9. 剑指offer 连续子序列和

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 class Solution { public:     int FindGreatestSumOfSu ...

  10. BZOJ 1196 二分答案+并查集

    http://www.lydsy.com/JudgeOnline/problem.php?id=1196 题目大意:n个城市,m-1条路,每条路有一级公路和二级公路之分,你要造n-1条路,一级公路至少 ...