注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

阿飘的博客

十里平湖霜满天 寸寸青丝愁华年

 
 
 

日志

 
 

Memcache源代码分析之数据存储  

2011-06-21 23:12:19|  分类: php |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
Memcache源代码分析之数据存储 - 阿飘 - 阿飘的博客

其它先不说,直接上张图,为什么呢,看图说话,哈哈。。入主题,上篇我们讲到网络处理,这次讲讲数据存储,从上面图上基本可以看到处理流程,不过忽略了一些细节,但里面有两个地方要值得说一下,在图上也做了标注,就是图中的1和2,分别是内存分配和hashtable管理,

1、内存分配,当一条命令的参数解析完之后,就要为之分配其内存空间,要分配的空间大小=key长度+1+后缀长度+内容长度,这里的后缀长度其实是压缩参数和内容长度的ascii所占的字符个数(具体请查看items.c的第81行),得知需要的内存长度之后就得从内存块中去查找空闲的内存,这就是所谓的内存池(什么是内存池技术,本blog里面也有写到),如何查找空闲的内存呢,首先从内存块的中找一块能放下该数据的块(内存块是一个数组,每个元素存放了该块的大小和由多块内存组成的链表),然后从内存块的块链表末尾开始向前循环查找,直到找到一个空闲的块(在这个查询过程中有一个前提就是,如果循环了50次还没找到数据,则视为没有空闲块),如果没有找到空闲的内存块,就重新分配一大块内存,然后挂到这个块链表上。

2、hashtable管理,当数据数量超过表大小的1.5倍,那么memcache会新申请一块原始表2倍的内存作为新表,然后启动一个线程将原来的数据重新hash(key)分配到新的表上;

以上就是简单的数据存储过程,太多细节的东西没有写进去,大家空了也可以去研究研究memcache的源代码。有错误的地方记得提出来。

  评论这张
 
阅读(1565)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017