【转】Memcached的使用和协议分析详解

In: memcached

16 2007

Memcached的使用和协议分析详解

作者:heiyeluren (黑夜路人)
邮箱:heiyeluren AT gmail.com
博客:http://blog.csdn.net/heiyeshuwu
时间:2006-11-12
关键字:PHP Memcached Linux 缓存

Memcached是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力。(关于Memcached的更多信息请Google)
Memcached官方网站:http://www.danga.com/memcached

【安装Memcached服务器端】

我目前的平台,服务器是Fedora Core 1(内核:2.4.22),客户端是Windows XP SP2,需要安装的就是服务器的Memcached的守护进程和客户端的PHP扩展php_memcache两个东西。现在我分别来讲。

服务器端主要是安装memcached服务器端,目前的最新版本是 memcached-1.2.0 。
下载:http://www.danga.com/memcached/dist/memcached-1.2.0.tar.gz
另外,Memcached用到了libevent这个库用于Socket的处理,所以还需要安装libevent, libevent的最新版本是libevent-1.2。(如果你的系统已经安装了libevent,可以不用安装)
官网:http://www.monkey.org/~provos/libevent/
下载: http://www.monkey.org/~provos/libevent-1.2.tar.gz

我分别把两个东东下载回来,放到 /tmp 目录下:
# cd /tmp
# wget http://www.danga.com/memcached/dist/memcached-1.2.0.tar.gz
# wget http://www.monkey.org/~provos/libevent-1.2.tar.gz

先安装libevent:
# tar zxvf libevent-1.2.tar.gz
# cd libevent-1.2
# ./configure –prefix=/usr
# make
# make install

然后看看我们的libevent是否安装成功:
# ls -al /usr/lib | grep libevent
lrwxrwxrwx    1 root     root          21 11?? 12 17:38 libevent-1.2.so.1 -> libevent-1.2.so.1.0.3
-rwxr-xr-x       1 root     root          263546 11?? 12 17:38 libevent-1.2.so.1.0.3
-rw-r–r–        1 root     root          454156 11?? 12 17:38 libevent.a
-rwxr-xr-x       1 root     root          811 11?? 12 17:38 libevent.la
lrwxrwxrwx    1 root     root          21 11?? 12 17:38 libevent.so -> libevent-1.2.so.1.0.3

还不错,都安装上了,再来安装memcached,同时需要安装中指定libevent的安装位置:

# cd /tmp
# tar zxvf memcached-1.2.0.tar.gz
# cd memcached-1.2.0
# ./configure –with-libevent=/usr
# make
# make install

如果中间出现报错,请仔细检查错误信息,按照错误信息来配置或者增加相应的库或者路径。
安装完成后会把memcached放到 /usr/local/bin/memcached ,我们看以下是否安装了:

# ls -al /usr/local/bin/mem*
-rwxr-xr-x    1 root     root       137986 11?? 12 17:39 /usr/local/bin/memcached
-rwxr-xr-x    1 root     root       140179 11?? 12 17:39 /usr/local/bin/memcached-debug

恩,安装完成了,现在我们看一下memcache的帮助:

# /usr/local/bin/memecached -h
memcached 1.2.0
-p <num>            port number to listen on
-s <file>               unix socket path to listen on (disables network support)
-l <ip_addr>        interface to listen on, default is INDRR_ANY
-d                          run as a daemon
-r                           maximize core file limit
-u <username> assume identity of <username> (only when run as root)
-m <num>          max memory to use for items in megabytes, default is 64 MB
-M                         return error on memory exhausted (rather than removing items)
-c <num>            max simultaneous connections, default is 1024
-k                          lock down all paged memory
-v                          verbose (print errors/warnings while in event loop)
-vv                        very verbose (also print client commands/reponses)
-h                         print this help and exit
-i                          print memcached and libevent license
-b                         run a managed instanced (mnemonic: buckets)
-P <file>             save PID in <file>, only used with -d option
-f <factor>          chunk size growth factor, default 1.25
-n <bytes>         minimum space allocated for key+value+flags, default 48

参数不算多,我们来启动一个Memcached的服务器端:
# /usr/local/bin/memcached -d -m 10  -u root -l 192.168.0.200 -p 12000 -c 256 -P /tmp/memcached.pid

-d选项是启动一个守护进程,-m是分配给Memcached使用的内存数量,单位是MB,我这里是10MB,-u是运行Memcached的用户,我这里是root,-l是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址192.168.0.200,-p是设置Memcached监听的端口,我这里设置了12000,最好是1024以上的端口,-c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定,-P是设置保存Memcached的pid文件,我这里是保存在 /tmp/memcached.pid,如果要结束Memcached进程,执行:
# kill `cat /tmp/memcached.pid`

也可以启动多个守护进程,不过端口不能重复。

【安装MemcachedPHP扩展】

Memcached就是在服务器监听端口,通过一定的协议交互来写入数据到服务器内存中,或者获取一些值。如果你了解Memcached的交互协议,完全可以自己构建Memcached的客户端,目前网上也有很多构建好的Memcached客户端的PHP Class,可以直接用,不过我这里为了效率,还是决定使用PECL中Memcached的专用扩展,因为毕竟是用C写的,效率比较高,而且安装部署比较方便。

下载PECL中的Memcache,因为我的客户端是Windows XP,所以需要下载dll版,我的PHP版本是PHP 5.1.4,必须下载PHP 5.1专用的扩展。
PECL官网:http://pecl.php.net For Linux
                       http://pecl4win.php.netFor Windows
扩展下载: http://pecl4win.php.net/download.php/ext/5_1/5.1.2/php_memcache.dll

如果你的PHP是其他版本,请到 http://pecl4win.php.net/ext.php/php_memcache.dll 选择你相应的版本,如果是Linux下的PHP,请到 http://pecl.php.net/package/memcache 选择相应想要下载的版本。

下载完了以后,我把php_memcache.dll 拷贝到 c:\php5\ext 目录下,如果你的扩展目录是在是缺省路径,(就是没有修改过php.ini中的扩展路径) 请拷贝到 c:\windows\ 目录下,如果是Linux平台,请自己编译安装,可以在程序中使用dl()函数加载,或者在编译php的时候加载进去。最后重启Web服务器,IIS/Apache。

我的网站目录是在:d:\mysite 目录下,现在建立一个 phpinfo.php 文件在网站根目录下,代码是:
<?phpinfo()?>
看有没有成功加载 php_memcache.dll 扩展。如果显示了 Memcached 选项和相应的版本信息,则说明成功加载了,否则请仔细检查上面的步骤。

如果一切正确无误,那么说明安装成功。

 

Memcached初试】

[ 接口介绍 ]
服务器端和客户端都安装配置好了,现在我们就来测试以下我们的成果。Memcached客户端包含两组接口,一组是面向过程的接口,一组是面向对象的接口,具体可以参考PHP手册 “LXXV. Memcached Functions” 这章。我们为了简单方便,就使用面向对象的方式,也便于维护和编写代码。Memcached面向对象的常用接口包括:

Memcached::connect — 打开一个到Memcached的连接
Memcached::pconnect — 打开一个到Memcached的长连接
Memcached::close — 关闭一个Memcached的连接
Memcached::set — 保存数据到Memcached服务器上
Memcached::get — 提取一个保存在Memcached服务器上的数据
Memcached::replace — 替换一个已经存在Memcached服务器上的项目(功能类似Memcached::set)
Memcached::delete — 从Memcached服务器上删除一个保存的项目
Memcached::flush — 刷新所有Memcached服务器上保存的项目(类似于删除所有的保存的项目)
Memcached::getStats — 获取当前Memcached服务器运行的状态

[ 测试代码 ]
现在我们开始一段测试代码:

<?php
//连接
$mem = new Memcached;
$mem->connect(“192.168.0.200 “, 12000);

//保存数据
$mem->set( ‘key1′, ’ This is first value’, 0,  60);
$val =  $mem->get(‘key1 ‘);
echo

编辑| 删除| 举报| 939

Comment Form

About this blog

QK31欢迎你的到来.

Photostream

search_extends

 

2007年一月
« 十二   二 »
1234567
891011121314
15161718192021
22232425262728
293031  

23
Unique
Visitors
Powered By Google Analytics

分类目录

标签云