首页 > 代码库 > [原创] PHP::Memcached 长链接分析

[原创] PHP::Memcached 长链接分析

开启或关闭长链接支持,参考:http://leeon.me/a/php-memcached

短链实验场景测试代码:1.php

<?php$mc = new Memcached();$mc->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE, true);$mc->addServers(array(        array(‘10.75.31.39‘,60000),));print_r($mc->getStats());sleep(2);?>

 

长链实验场景测试代码:2.php

<?php$mc = new Memcached(‘mc‘);$mc->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE, true);if (!count($mc->getServerList())) {    $mc->addServers(array(        array(‘10.75.31.39‘,60000),    ));}print_r($mc->getStats());sleep(2);?>

 

环境:  

Nginx+phpfpm

phpfpm 静态模式,单进程。

 

A实验过程:

  1. 访问curl http://127.0.0.1/1.php ,等输出。

  2. 待第一步有输出时,另起窗口netstat -anpt | grep :60000 。

  结论,每次访问的时候,访问后端资源都会新建不同链接。

B实验过程:

  1. 访问curl http://127.0.0.1/2.php ,等输出。

  2. 待第一步有输出时,另起窗口netstat -anpt | grep :60000 。

  结论,每次访问的时候,访问后端资源都会新建相同的链接。

 

最后注意,即使请求结束,仍然可以看到6000端口的链接,直到这个php-fpm进程被回收。理论上存在空闲链接不会释放。

如果担心踩坑,可以代码最后加入官方提供的 MEMCACHED::QUIT()。

 

参考资料:

http://php.net/manual/zh/memcached.getstats.php

http://haili.me/archives/530.html

http://leeon.me/a/php-memcached