Chinaunix首页 | 论坛 | 博客
  • 博客访问: 28268
  • 博文数量: 13
  • 博客积分: 653
  • 博客等级: 上士
  • 技术积分: 150
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-25 21:20
文章分类
文章存档

2011年(2)

2010年(11)

我的朋友

分类: LINUX

2010-06-22 16:44:29

Memcached &Php-memcache

Memcached简介

Memcached 是由Danga Interactive 开发的,高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。

通过在内存里维护一个统一的巨大的Hash表,Memcached能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。

Memcached使用了libevent(在linux下最好使用epoll)来均衡任何数量的打开链接,使用非阻塞的网络I/O,对内部对象实现引用计数,使用自己的页块分配器和哈希表,因此虚拟内存不会产生碎片,并且虚拟内存分配的时间复杂度可以保证为o(1)

Memcached的缓存是一种分布式的,可以让不同主机上的多个用户同时访问,因此解决了共享内存只能单机应用的局限,更不会出现使用数据库做类似事情的时候,磁盘开销和阻塞的发生。

配置调试过程

1相关环境

环境

Centos 5.52.6.18

源码包

memcached-1[1].4.5.tar.gz

memcache-2[1].2.5.tgz

 

2 编译配置

2.1 memcached

首先服务器端memcached需要libevent库的支持,事先需要安装好libevent库,详情请Google之。

#tar xzvf memcached-1[1].4.5.tar.gz

#cd memcached-1.4.5

#./configure

#make && make install

#cd ..

帮助

#/usr/local/bin/memcached –h

启动

#/usr/local/bin/memcached –d –m 10 –u root –l 127.0.0.1 –p 10000 –c 256 –P /tmp/memcached.pid

-d:启动一个守护进程,daemon

-m:分配给memcached使用的内存数量,单位是MB,此处是10MB

-u:运行memcached的用户,此处是root

-l:监听的服务器ip地址,此处为监听本机localhost

-p:监听的端口号,此处为10000

-c:最大运行的并发连接数,默认值是1024,此处为256

-Pmemcachedpid文件

终止

#kill -9 `cat /tmp/memcached.pid`

需要注意的是关掉selinux

#getenforce

#setenforce 0

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

 

2.2 php-memcache

#tar xzvf memcache-2[1].2.5.tgz

#cd memcache-2.2.5

#./configure

#make && make install

编辑php的配置文件php.ini

#echo “extension=memcache.so”>>/usr/local/lib/php.ini

由于memcache会用到libevent库,所以需要

#touch /etc/ld.so.conf.d/libevent-i386.conf

#echo “/usr/local/lib”>>/etc/ld.so.conf.d/libevent-i386.conf

#ldconfig

 

3测试

3.1服务器

服务器端开启nginxmemcachedphp-cgi

#/usr/bin/nginx

#/usr/local/bin/php-cgi –b 127.0.0.1:9000 &

#/usr/local/bin/memcached -d -m 10 -u root -l 127.0.0.1 -p 10000 -c 256 -P /tmp/memcached.pid

#ps –ef

root     18631     1  0 Jun18 ?        00:00:00 nginx: master process /usr/bin/nginx

root     18727     1  0 Jun18 ?        00:00:00 /usr/local/bin/memcached -d -m 10 -u root -l 127.0.0.1 -p 10000 -c 256 -P /tmp/memcached.pid

nobody   18774 18631  0 Jun18 ?        00:00:00 nginx: worker process

nobody   18775 18631  0 Jun18 ?        00:00:00 nginx: worker process

nobody   18776 18631  0 Jun18 ?        00:00:00 nginx: worker process

nobody   18777 18631  0 Jun18 ?        00:00:00 nginx: worker process

nobody   18778 18631  0 Jun18 ?        00:00:00 nginx: worker process

nobody   18779 18631  0 Jun18 ?        00:00:00 nginx: worker process

nobody   18780 18631  0 Jun18 ?        00:00:00 nginx: worker process

nobody   18781 18631  0 Jun18 ?        00:00:00 nginx: worker process

root     18854 13705  0 Jun18 pts/1     00:00:00 /usr/local/bin/php-cgi -b 127.0.0.1:9000

#netstat –anpt

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name

tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      18854/php-cgi

tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      1935/portmap

tcp        0      0 127.0.0.1:10000             0.0.0.0:*                   LISTEN      18727/memcached

tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      18631/nginx

tcp        0      0 0.0.0.0:881                 0.0.0.0:*                   LISTEN      1971/rpc.statd

tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      2223/cupsd

tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      2262/sendmail: acce

tcp        0      0 :::22                       :::*                        LISTEN      2210/sshd

tcp        0      0 :::4730                     :::*                        LISTEN      11676/gearmand

tcp        0      0 ::ffff:192.168.159.129:22   ::ffff:192.168.159.1:1066   ESTABLISHED 13703/1

可以看到后台进程都成功启动

 

 

3.2客户端

Memcache客户端包含两组接口,一组是面向过程的接口,一组是面向对象的接口,具体可以参考php手册关于memcache functions这部分,为了简单方便,使用面向对象的方法,便于维护和编写代码。

Memcache面向对象常用接口如下:

Memcache::connect—打开一个到Memcache的连接

Memcache::pconnect—打开一个到Memcache的长连接

Memcache::close—关闭一个Memcache的连接

Memcache::set—保存数据到Memcache服务器上

Memcache::get—提取一个保存在Memcache服务器上的数据

Memcache::replace—替换一个已经存在Memcache服务器上的项目

Memcache::flush—刷新所有Memcache服务器上保存的项目

Memcache::getStats—获取当前Memcache服务器的状态

 

/usr/local/nginx/html目录下创建memcache_test.php,内容如下:

#!/usr/local/bin/php

        //connect

        $mem = new Memcache;

        $mem->connect('localhost',10000);

 

        //save object

        $mem->set('key1','This is first value',0,60);

        $val = $mem->get('key1');

        echo "Get key1 value:".$val."
";

        //replace

        $mem->replace('key1','this is replace value',0,60);

        $val = $mem->get('key1');

        echo "Get key1 value:".$val."
";

 

        //save array

        $arr = array('aaa','bbb','ccc','ddd');

        $mem->set('key2',$arr,0,60);

        $val2 = $mem->get('key2');

        echo "get key2 value:";

        print_r($val2);

        echo "
";

 

        //delete op

        $mem->delete('key1');

        $val = $mem->get('key1');

        echo "get key1 value:".$val."
";

 

        //flush

        $mem->flush();

        $val2=$mem->get('key2');

        echo "get key2 value:".$val2."
";

        print_r($val2);

        echo "
";

 

        //close

        $mem->close();

 

?>

然后打开浏览器,地址栏输入xxx.xxx.xxx.xxx为你的服务器的地址),如果出现下面的运行结构,表明memcachedphp-memcache的测试成功

Get key1 value:This is first value
Get key1 value:this is replace value
get key2 value:Array ( [0] => aaa [1] => bbb [2] => ccc [3] => ddd )
get key1 value:
get key2 value:

阅读(774) | 评论(0) | 转发(0) |
0

上一篇:Nginx相关

下一篇:多进程&多线程

给主人留下些什么吧!~~