memcache:memcache分析调试
来源: 发布时间:星期日, 2009年1月4日 浏览:33次 评论:0
1.有关本文档 本文档所有 ![](/icons/74096de.gif) 分析都是在1.2版本的上,偶尔会提到比较1.1版本.其他版本没有阅读. ![](/icons/74096yi.gif) 个星期时间 LINUX中使用 ![](/icons/74096de.gif) 是epoll,监听EPOLLIT水平触发.因此从理论上讲,memcache ![](/icons/74096de.gif) 并发连接可以达到infinite,前提是event池和内存空间足够大.而没有和linux ![](/icons/74096de.gif) 线程处理有关系.事实上,在后面 ![](/icons/74096de.gif) 测试中便可发现,在单结点连接压力测试时,瞬时并发连接可以达到5000多个.只是等待触发时间上 ![](/icons/74096de.gif) 长短和有效无效 ![](/icons/74096de.gif) 区别. 在表4.2中可以清晰 ![](/icons/74096de.gif) 看到并发连接 ![](/icons/74096de.gif) ![](/icons/74096yi.gif) 些数据. 3. 服务端系统负载 通过自己编写 ![](/icons/74096de.gif) 服务器端,对单结点 ![](/icons/74096de.gif) memcache进行了连接压力测试.其中测试用例 ![](/icons/74096de.gif) 编写是这样 ![](/icons/74096de.gif) :启用 7个客户端,每个客户端串行运行1000个进程,每个进程开3000线程,每个线程执行10次memcache ![](/icons/74096de.gif) 读操作或者写操作(操作相同).客户端并发连接. 1. 客户端(7) ![](/icons/74096de.gif) 环境:Intel(R) Xeon(R) CPU 5120 @ 1.86GHz,4G memory. 2. 服务器端(1) ![](/icons/74096de.gif) 环境:Intel(R) Xeon(R) CPU 5120 @ 1.86GHz,4G memory. 3. 网络环境:100M网卡,Cisco交换机. 4. 数据记录:见表4.2和图4.2. ![](/icons/74096class.gif) =insertimage title=点击在新窗口中浏览此图片 height=513 alt=点击在新窗口中浏览此图片 src="http://www.crazycoder.cn/WebFiles/20091/05b9efc3-e38a-4e9d-99db-f0df2806847c.jpg" width=573 border=0> 表4.2 memcache连接和系统负载 图4.2 memcache连接和系统负载 很显然,memcache ![](/icons/74096de.gif) 运行在系统cpu ![](/icons/74096de.gif) 消耗上占十分少 ![](/icons/74096de.gif) 比重,即便是很恐怖 ![](/icons/74096de.gif) 并发连接也不会给系统带来多大 ![](/icons/74096de.gif) 负载, ![](/icons/74096yinwei.gif) 其磁盘IO free(所有操作都在内存中)和相应 ![](/icons/74096de.gif) 内存分配机制决定其占用cpu ![](/icons/74096de.gif) 极少,而相反,在网络IO上却花费很大 ![](/icons/74096de.gif) 时间. 4. 空间分配,命中率 由于本地测试式 ![](/icons/74096de.gif) get数据非常固定,因此命中率基本为100%.在10.68.1.31上运行了 ![](/icons/74096yi.gif) 个有前端应用 ![](/icons/74096de.gif) memcachce服务器,运行时间已经有364个多小时了. 因此通过10.68.1.31上 ![](/icons/74096de.gif) 数据介绍说明(版本为1.1.13).通过memcache ![](/icons/74096de.gif) 统计协议可以清楚 ![](/icons/74096de.gif) 看到其命中率高达95.9%,如表4.3所示: ![](/icons/74096class.gif) =insertimage title=点击在新窗口中浏览此图片 alt=点击在新窗口中浏览此图片 src="http://www.crazycoder.cn/WebFiles/20091/65e0dbd9-cc0b-40a7-a010-de899d19a366.jpg" border=0> 表4.3 memcache空间分配和命中 5.memcache客户端编写 1. memcache协议 在memcache协议中规定了Client和Server ![](/icons/74096de.gif) 通信规则. 在源码分析中,主要分析了update/get/del/incr/decr几类 ![](/icons/74096de.gif) 处理过程.其具体 ![](/icons/74096de.gif) 规则可以在官方文档中有介绍说明 ![](/icons/74096kh.gif) ,这里做简单 ![](/icons/74096de.gif) 解释. 引用 1. Update( ![](/icons/74096set.gif) /add/replace): Client请求规则: \r\n \r\n Server响应规则: STORED\r\n 或者 NOT_STORED\r\n
其中 是 ,add,replace 3种中![](/icons/74096de.gif) 种; 是client请求存储 键值; 是任意16bit长 unsigned 值,在get操作时,也将伴随data 起返回,可以用来存储某些认证信息或者描述信息; 是key-value对象 消亡时间,如果为0,则代表永不消亡; 是数据 长度,千万小心,这个很重要,在memcache源代码里,直接读取这个数值来当作数据 长度,而不是用strlen计算 .这个显而易见, 数据中有可能存在/r/n符号,也就是协议中规定 分隔符.如果出现,则严格按长度取数据; 也就是value值,可以包含\r\n值.
STORED代表update操作成功 NOT_STORED代表update操作失败.
2. Get(get/bget) Client请求规则: *\r\n Server响应规则: VALUE\r\n \r\n END\r\n
Get/bget操作可以 次操作多个key值,server 响应格式中 关键字可以参看上面 解释,END代表数据显示结束.如果没有数据,则只有 个END\r\n.
3. Delete(delete) Client请求规则: delete>>>>>>>>>>>>>>>>>>>>>>>>>>>
相关文章
读者评论
发表评论
|
|