idv2.com
memcached 全面剖析
长野雅广、前坂徹著
charlee 译
版本 1.0
1
idv2.com
目 录
译者序..................................................................................................................................................4
第 1 章 memcached 的基础.................................................................................................................5
1.1 memcached 是什么?...............................................................................................................5
1.2 memcached 的特征...................................................................................................................6
协议简单.....................................................................................................................................6
基于 libevent 的事件处理..........................................................................................................6
内置内存存储方式.....................................................................................................................6
memcached 不互相通信的分布式.............................................................................................6
1.3 安装 memcached.......................................................................................................................7
memcached 的安装.....................................................................................................................7
memcached 的启动.....................................................................................................................8
1.4 用客户端连接...........................................................................................................................8
1.5 使用 Cache::Memcached..........................................................................................................9
使用 Cache::Memcached 连接 memcached................................................................................9
保存数据...................................................................................................................................10
获取数据...................................................................................................................................10
删除数据...................................................................................................................................10
增一和减一操作.......................................................................................................................10
1.6 总结.........................................................................................................................................11
第 2 章 理解 memcached 的内存存储..............................................................................................12
2.1 Slab Allocation 机制:整理内存以便重复使用...................................................................12
Slab Allocation 的主要术语.....................................................................................................13
2.2 在 Slab 中缓存记录的原理....................................................................................................13
2.3 Slab Allocator 的缺点.............................................................................................................13
2.4 使用 Growth Factor 进行调优................................................................................................14
2.5 查看 memcached 的内部状态................................................................................................15
2.6 查看 slabs 的使用状况...........................................................................................................16
2.7 总结.........................................................................................................................................17
第 3 章 memcached 的删除机制和发展方向...................................................................................18
3.1 memcached 在数据删除方面有效利用资源.........................................................................18
数据不会真正从 memcached 中消失......................................................................................18
Lazy Expiration.........................................................................................................................18
3.2 LRU:从缓存中有效删除数据的原理.................................................................................18
3.3 memcached 的最新发展方向.................................................................................................18
关于二进制协议.......................................................................................................................19
二进制协议的格式...................................................................................................................19
HEADER 中引人注目的地方..................................................................................................20
2
idv2.com
3.4 外部引擎支持........................................................................................................................20
外部引擎支持的必要性...........................................................................................................20
简单 API 设计的成功的关键...................................................................................................21
重新审视现在的体系...............................................................................................................21
3.5 总结........................................................................................................................................22
第 4 章 memcached 的分布式算法...................................................................................................23
4.1 memcached 的分布式.............................................................................................................23
memcached 的分布式是什么意思?.......................................................................................23
4.2 Cache::Memcached 的分布式方法........................................................................................25
根据余数计算分散...................................................................................................................25
根据余数计算分散的缺点.......................................................................................................26
4.3 Consistent Hashing.................................................................................................................27
Consistent Hashing 的简单说明...............................................................................................27
支持 Consistent Hashing 的函数库..........................................................................................29
4.4 总结........................................................................................................................................29
第 5 章 memcached 的应用和兼容程序...........................................................................................30
5.1 mixi 案例研究.........................................................................................................................30
服务器配置和数量...................................................................................................................30
memcached 进程.......................................................................................................................31
memcached 使用方法和客户端...............................................................................................31
5.2 memcached 应用经验.............................................................................................................32
通过 daemontools 启动.............................................................................................................33
监视...........................................................................................................................................33
memcached 的性能...................................................................................................................33
5.3 兼容应用程序........................................................................................................................35
Tokyo Tyrant 案例.....................................................................................................................35
5.4 总结........................................................................................................................................36
3
idv2.com 译者序
译者序
如今,越来越多的 Web 应用程序开始使用 memcached 这个高速的缓存服务器软件。然而,
memcached 的基础知识远远未能像其他 Web 技术那样普及,memcached 在国内的大规模应用也鲜为
人知。而日本的 mixi(http://mixi.jp)则在这方面走在了前面,不仅大规模使用 memcached 作为缓
存来加速 Web 应用,而且自行开发了 Tokyo Cabinit、Tokyo Tyrant 等一系列相关的软件。
最近,日本的技术评论社的网站上刊登了 mixi 的两名工程师长野雅广、前坂徹撰写的一篇连载
《memcached を知り尽くす》。这篇连载语言简洁、通俗易懂,非常适合 memcached 入门的人阅读。
因此我将它翻译成中文,发表在我的技术 blog(tech.idv2.com)上。然后将翻译结果合并后稍作加
工,形成了这篇 PDF 文档,以方便阅读。
本文的原文地址如下,懂日语的朋友可以直接去参考原文:
● http://gihyo.jp/dev/feature/01/memcached/
翻译后的文章地址如下:
● 第 1 章:http://tech.idv2.com/2008/07/10/memcached-001/
● 第 2 章:http://tech.idv2.com/2008/07/11/memcached-002/
● 第 3 章:http://tech.idv2.com/2008/07/16/memcached-003/
● 第 4 章:http://tech.idv2.com/2008/07/24/memcached-004/
● 第 5 章:http://tech.idv2.com/2008/07/31/memcached-005/
本 PDF 可以在这个地址下载:
● http://tech.idv2.com/2008/08/17/memcached-pdf/
charlee
2008 年 8 月 17 日
4
idv2.com 第 1 章 memcached 的基础
第 1 章 memcached 的基础
我是 mixi
株式会社 开发部系统运营组的长野。日常负责程序的运营。从今天开始,将针对最近在
Web 应用的可扩展性领域的热门话题 memcached,与我公司开发部研究开发组的前坂一起,说明其
内部结构和使用。
1.1 memcached 是什么?
memcached
是以 LiveJournal
旗下 Danga Interactive
公司的 Brad Fitzpatric
为首开发的一款软件。现在
已成为 mixi、hatena、Facebook、Vox、LiveJournal 等众多服务中提高 Web 应用扩展性的重要因素。
许多 Web 应用都将数据保存到 RDBMS 中,应用服务器从中读取数据并在浏览器中显示。但随着数
据量的增大、访问的集中,就会出现 RDBMS 的负担加重、数据库响应恶化、网站显示延迟等重大
影响。
这时就该 memcached 大显身手了。memcached 是高性能的分布式内存缓存服务器。一般的使用目的
是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态 Web 应用的速度、提高可扩展
性。
图 1.1:一般情况下 memcached 的用途
5