(本文作者为阿里云OCS研发工程师 玄贝)
最近有PHP用户反馈,利用OCS做压测,达不到我们给出的性能对比报告里的指标:
http://bbs.aliyun.com/read/162907.html。通过了解具体情况,大多数用户在使用PHP连OCS时,都是通过走ApacheWEB服务再连到OCS,使用的是短连接。而每个短连接的开销不止是socket重连,还有复杂的重新鉴权流程,开销比一个普通请求大许多,因此对网站的效率是有很大影响的。于是我们建议用户改短连接为长连接,但是OCS要求使用的PHP MEMCACHED扩展,不像memcache扩展那样有个pconnect接口,于是查了资料写个简单明了的教程供大家参考.
在PHP官网介绍memcached构造函数时有下面一段话。
[font=&][attachment=56945]
即在调用构造函数时传给它一个同样的persistent_id就能实现共享连接。代码实现如下:
<?php
$memc = new Memcached(‘ocs’);//这里的ocs,就是persistent_id
if (count($memc->getServerList()) == 0) /*建立连接前,先判断*/
{
echo "New connection"."<br>";
/*所有option都要放在判断里面,因为有的option会导致重连,让长连接变短连接!*/
$memc->setOption(Memcached::OPT_COMPRESSION, false);
$memc->setOption(Memcached::OPT_BINARY_PROTOCOL, true);
/* addServer 代码必须在判断里面,否则相当于重复建立’ocs’这个连接池,可能会导致客户端php程序异常*/
$memc->addServer("your_ip", 11212);
$memc->setSaslAuthData("user", "password");
}
else
{
echo "Now connections is:".count($memc->getServerList())."<br>";
}
$memc->set("key", "value");
echo "Get from OCS: ".$memc->get("key");
//$memc->quit();/*代码结束的地方一定不能加quit,否则变短连接!*/
?>
New connection
Get from OCS: value
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。