首页 > 开发 > PHP > 正文

PHP扩展Memcache分布式部署方案

2024-05-04 22:33:51
字体:
来源:转载
供稿:网友

基础环境

其实基于PHP扩展的Memcache客户端实际上早已经实现,而且非常稳定。先解释一些名词,Memcache是danga.com的一个开源项目,可以类比于MySQL这样的服务,而PHP扩展的Memcache实际上是连接Memcache的方式。

首先,进行Memcache被安装具体可查看博客里的其它几篇文章;
其次,进行PHP扩展的安装,官方地址是http://pecl.php.net/package/memcache
最后,启动Memcache服务,比如这样,通过不同端口启动多个进程模拟分布式:

代码如下:/usr/local/bin/memcached -d -p 11211 -u root -m 10 -c 1024 -t 8 -P /tmp/memcached.pid
/usr/local/bin/memcached -d -p 11213 -u root -m 10 -c 1024 -t 8 -P /tmp/memcached.pid
/usr/local/bin/memcached -d -p 11214 -u root -m 10 -c 1024 -t 8 -P /tmp/memcached.pid
启动三个只使用10M内存以方便测试。

参数说明:

-d选项是启动一个守护进程,
-m 是分配给Memcache使用的内存数量,单位是MB,我这里是512MB,
-u是运行Memcache的用户,我这里是root,
-l 是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址192.168.0.1,
-p是设置Memcache监听的端口,我 这里设置了11211,最好是1024以上的端口,
-c选项是最大运行的并发连接数,默认是1024,我这里设置了512,按照你服务器的负载量 来设定,
-P是设置保存Memcache的pid文件,我这里是保存

分布式部署

PHP的PECL扩展中的memcache实际上在2.0.0的版本中就已经实现多服务器支持,现在都已经2.2.5了。请看如下代码

$memcache = new Memcache;$memcache->addServer('localhost', 11211);$memcache->addServer('localhost', 11213);$memcache->addServer('localhost', 11214);$memStats = $memcache->getExtendedStats();print_r($memStats);

通过上例就已经实现Memcache的分布式部署,是不是非常简单。

分布式系统的良性运行

在Memcache的实际使用中,遇到的最严重的问题,就是在增减服务器的时候,会导致大范围的缓存丢失,从而可能会引导数据库的性能瓶颈。测试时可以通过关闭一个memcached进程,来测试数据是否存在,实例:

<?php//第一次设置值后再作注释$memcache = new Memcache;$memcache->addServer('localhost', 11211);//$memcache->set("mykey", "这个值在11213添加前添加的");$memcache->addServer('localhost', 11213);if (!$memcache) echo "Connection to memcached failed";  /*  $memcache->set("str_key", "String to store in memcached");  $memcache->set("num_key", 123);  $object = new StdClass;  $object->attribute = 'test';  $memcache->set("obj_key", $object);  $array = Array('assoc'=>123, 345, 567);  $memcache->set("arr_key", $array);  */  var_dump($memcache->get('mykey'));  var_dump($memcache->get('str_key'));  var_dump($memcache->get('num_key'));  var_dump($memcache->get('obj_key'));$memStats = $memcache->getExtendedStats();var_dump($memStats);?>            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表