欢迎来到天天文库
浏览记录
ID:9794366
大小:541.00 KB
页数:22页
时间:2018-05-10
《memcached代码分析详解》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、《1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111memcached分析详解修订日期修订内容版本修订人2009-3-13初始化江军目 录1.文档目的11.1.前言12.memcached是什么22.1.memcached的特征23.memcached适合的场合44.memcached的代码分析54.1.main流程54.2.memcached服务流程(TCP)64.3.m
2、emcached状态转换和通信协议处理74.4.memcached核心数据结构74.5.SlabAllocation机制:整理内存以便重复使用85.memcached的使用优化105.1.命中率105.2.空间利用率115.3.加速比125.4.安全性能126.memcached的测试分析136.1.读写memcache指令测试136.2.服务端系统负载136.3.空间分配,命中率147.memcached的中间层客户端编写168.libevent简介179.memcached应用1810.结束语201.文档目的1.1.前言文档就是简单的把memcached做一个代码走读和
3、分析,起到一个抛砖引玉的作用;目的就是让大家在使用memcached这个工具时,多一些对工具的了解,从而确定你的程序是否真的需要用memcached来实现不可;短短2个小时也讲不了多少,主要是做一个学习探讨,如果大家感兴趣的话后期可以再做培训牛人真多啊,向先行者致敬!20/91.memcached是什么 memcached广泛应用在大负载高并发的网站上,是一种非常成熟的产品(称为一项技术也未尝不可)。像facebook,youtube,yahoo,sina,sohu,netease,豆瓣等网站均或多或少使用了该项产品。memcached在以用户为中心的网站上,表现尤其突
4、出,例如sns,blog等web2.0应用的站点。这些站点一般来讲,特别注重用户体验,用户对服务器的响应速度要求很高,用户数据相对比较复杂、关连度比较高,需要经常对数据库进行更新和检索。许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、网站显示延迟等重大影响。这时就该memcached大显身手了。memcached是高性能的分布式内存缓存服务器。一般使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。2.1.memcac
5、hed的特征1)memcached的服务器客户端通信并不使用复杂的XML等格式,而使用简单的基于文本行的协议。因此,通过telnet也能在memcached上保存数据、取得数据。下面是例子。$telnetlocalhost8119Trying127.0.0.1...Connectedtolocalhost.localdomain(127.0.0.1).Escapecharacteris'^]'.setfoo003(保存命令)bar(数据)20/9STORED(结果)getfoo(取得命令)VALUEfoo03(数据)bar(数据)协议可以参考:2)为了提高性能,memcac
6、hed中保存的数据都存储在memcached内置的内存存储空间中。由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。另外,内容容量达到指定值之后,就基于LRU(LeastRecentlyUsed)算法自动删除不使用的缓存。memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。3)memcached尽管是“分布式”缓存服务器,但服务器端并没有分布式功能。各个memcached不会互相通信以共享信息。那么,怎样进行分布式呢?这完全取决于客户端的实现。20/91.memcached适合的场合memcached是“分布式
7、”的内存对象缓存系统,那么就是说,那些不需要“分布”的,不需要共享的,或者干脆规模小到只有一台服务器的应用,memcached不会带来任何好处,相反还会拖慢系统效率,因为网络连接同样需要资源,即使是UNIX/Windows本地连接也一样。测试数据显示,memcached本地读写速度要比直接.NET内存数组慢几十倍,而APC、共享内存方式都和直接数组差不多。可见,如果只是本地级缓存,使用memcached是非常不划算的。Memcached在很多时候都是作为数据库前端cache使用的。因为它比数据库少了很多SQL解析、
此文档下载收益归作者所有