Memcached源码剖析笔记XguruMemcached是一个自由、源码开放、高性能、分布式内存对象缓存系统,目的在于通过减轻数据库负载来使动态Web应用程序提速。XGuruMemcached源码剖析笔记1目录1.背景...................................................................................................................................32.memcached的安装...........................................................................................................43.memcached的配置...........................................................................................................54.memcached的使用...........................................................................................................64.1.存储命令............................................................................................................74.2.读取命令............................................................................................................84.3.删除命令............................................................................................................84.4.高级命令............................................................................................................94.5.其他命令..........................................................................................................105.Memcached内部工作机制.............................................................................................115.1.Memcached基本的数据结构..........................................................................115.2.基本设计概念和处理流程..............................................................................125.3.内部Hash机制................................................................................................155.3.1.Hash函数及冲突解决.............................................................................155.3.2.HashTable主要函数................................................................................155.4.slab内存处理机制...........................................................................................175.4.1.slab主要函数...........................................................................................175.4.2.slab机制中所采用的LRU算法.............................................................195.5.控制item各种函数.........................................................................................205.6.守护进程机制..................................................................................................225.7.Socket处理机制..............................................................................................23XGuruMemcached源码剖析笔记25.7.1.Unix域协议..............................................................................................235.7.2.TCP/UDP协议.........................................................................................245.8.多线程处理机制..............................................................................................255.9.事件处理机制..................................................................................................256.未完善之处.....................................................................................................................277.参考文献.........................................................................................................................28XGuruMemcached源码剖析笔记31.背景Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。Memcached是一个自由、源码开放、高性能、分布式内存对象缓存系统,目的在于通过减轻数据库负载来使动态Web应用程序提速。Memcached是一个在内存中对任意的数据(比如字符串,对象等)所使用的key-value存储。数据可以来自数据库调用,API调用,或者页面渲染的结果。Memcached设计理念就是小而强大,它简单的设计促进了快速部署、易于开发,并解决面对大规模的数据缓存的许多难题。所开放的API能用于大部分流行的程序语言XGuruMemcached源码剖析笔记42.memcached的安装由于memcached采用libevent的事件处理机制,因此安装memcached之前需要先安装libevent。Memcached::~provos/libevent/在Ubuntu下可以使用sudoapt-getinstalllibevent和sudoapt-getinstallmemcached来安装或者使用传统wget的方式~$wget~$tarzxfmemcached1.2.8.tar.gz~$cdmemcached1.2.8~$./configure~$make目前最新的版本为1.4.4XGuruMemcached源码剖析笔记53.memcached的配置主要使用的命令-d以守护程序(daemon)方式运行memcached;-m设置memcached可以使用的内存大小,单位为M;-l设置监听的IP地址,如果是本机的话,通常可以不设置此参数;-p设置监听的端口,默认为11211,所以也可以不设置此参数;-u指定用户,如果当前为root的话,需要使用此参数指定用户。-f设置增长因子(调优时使用)-v/-vv详细显示工作时各种参数Memcached采用典型的getopt()函数获取各种配置比如XGuruMemcached源码剖析笔记6./memcached-m512-p11211-vv该例分配给memcached的可用内存512M,监听11211端口,显示详细的运行信息。4.memcached的使用memcached提供的API可以在大多数的编程语言使用,在这里测试使用的是PuTTy的telnet方式,使用telnet连接其11211端口。Memcached有4种类型的命令:存储命令(set/add/replace/append/prepend)指示服务器储存一些由键值标识的数据。客户端发送一行命令,后面跟着数据区块;然后,客户端等待接收服务器回传的命令行,指示成功与否。读取命令(get/bget/gets)指示服务器返回与所给键值相符合的数据(一个请求中右一个或多个键值)。客户端发送一行命令,包括所有请求的键值;服务器每找到一项内XGuruMemcached源码剖析笔记7容,都会发送回客户端一行关于这项内容的信息,紧跟着是对应的数据区块;直到服务器以一行“END”回应命令结束。状态命令(stat)被用于查询服务器的运行状态和其他内部数据。其他命令,如flush_all,version,quit等。4.1.存储命令命令格式:commandnamekeyflagsexptimebytesdatablock命令解释:commandnameset/add/replacekey查找关键字flags客户机使用它存储关于键值对的额外信息exptime该数据的存活时间,0为永远bytes存储字节数datablock存储的数据块存储命令区别setaddrepalce无论如何都进行存储只有数据不存在时进行添加只有数据存在时进行替换XGuruMemcached源码剖析笔记84.2.读取命令getkeykey可以表示一个或多个键值,由空格隔开的字串4.3.删除命令deletekey删除键值为key的数