Memcache源代码分析之数据存储
浏览:3885次 出处信息
其它先不说,直接上张图,为什么呢,看图说话,哈哈。。入主题,上篇我们讲到网络处理,这次讲讲数据存储,从上面图上基本可以看到处理流程,不过忽略了一些细节,但里面有两个地方要值得说一下,在图上也做了标注,就是图中的1和2,分别是内存分配和hashtable管理,
1、内存分配,当一条命令的参数解析完之后,就要为之分配其内存空间,要分配的空间大小=key长度+1+后缀长度+内容长度,这里的后缀长度其实是压缩参数和内容长度的ascii所占的字符个数(具体请查看items.c的第81行),得知需要的内存长度之后就得从内存块中去查找空闲的内存,这就是所谓的内存池(什么是内存池技术,本blog里面也有写到),如何查找空闲的内存呢,首先从内存块的中找一块能放下该数据的块(内存块是一个数组,每个元素存放了该块的大小和由多块内存组成的链表),然后从内存块的块链表末尾开始向前循环查找,直到找到一个空闲的块(在这个查询过程中有一个前提就是,如果循环了50次还没找到数据,则视为没有空闲块),如果没有找到空闲的内存块,就重新分配一大块内存,然后挂到这个块链表上。
2、hashtable管理,当数据数量超过表大小的1.5倍,那么memcache会新申请一块原始表2倍的内存作为新表,然后启动一个线程将原来的数据重新hash(key)分配到新的表上;
以上就是简单的数据存储过程,太多细节的东西没有写进去,大家空了也可以去研究研究memcache的源代码。有错误的地方记得提出来。
建议继续学习:
- 关于memcache分布式一致性hash (阅读:10686)
- Memcache分布式部署方案 (阅读:5429)
- 关于session和memcache的若干问题 (阅读:4274)
- Memcache mutex设计模式 (阅读:3748)
- 关于Memcache长连接自动重连的问题 (阅读:3666)
- Memcache协议的学习 (阅读:3613)
- Memcache源代码分析之网络处理 (阅读:3591)
- memcache的几点注意 (阅读:3468)
- 解决memcache连接奇慢问题一例 (阅读:3458)
- memcache连接慢又一例 (阅读:3299)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:学习libevent的select模型
后一篇:Memcache源代码分析之网络处理 >>
文章信息
- 作者:IM鑫爷 来源: IM鑫爷
- 标签: Memcache 数据存储
- 发布时间:2011-09-19 23:58:35
建议继续学习
近3天十大热文
- [68] Go Reflect 性能
- [68] 如何拿下简短的域名
- [67] Oracle MTS模式下 进程地址与会话信
- [62] IOS安全–浅谈关于IOS加固的几种方法
- [61] 图书馆的世界纪录
- [60] 【社会化设计】自我(self)部分――欢迎区
- [58] android 开发入门
- [56] 视觉调整-设计师 vs. 逻辑
- [49] 给自己的字体课(一)——英文字体基础
- [48] 读书笔记-壹百度:百度十年千倍的29条法则