基础环境
其实基于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);?>
新闻热点
疑难解答