如何使用PHP 擴展Memcached 的長連接模式
我們知道Memcache有個pconnect() ?方法可以實現長連接,其實Memcached也可以實現持久化連接。
使用PHP 擴展Memcached 的長連接模式
Memcached的擴展模塊提供的構造函數提供一個參數persistent_id
可選項,手冊中這樣介紹:
默認情況下,Memcached實例在請求結束後會被銷毀。但可以在創建時通過persistent_id為每個實例指定唯一的ID, 在請求間共享實例。所有通過相同的persistent_id值創建的實例共享同一個連接。
這個參數的含義就是說如果傳遞了一個id給到構造方法,那麼就會建立長連接:
<?php
$mc = new Memcached('mc');
$mc->addServers(array(
array('mc1.example.com',11211),
array('mc2.example.com',11211),
));
?>
PHP 擴展Memcached 長連接模式的最佳實踐
但需要注意的是當第一次通過建立起Memcahced長連接後,切記不要再重複添加Memcached的服務端,不然頁面沒刷新一次就會添加一次,該persistent_id下的Memcached服務器端就會越來越多,這樣就會導致PHP的進程異常,與Memcached的通信越來越慢。所以使用PHP Memcached的長連接模式最佳實踐是使用getServerList()方法是否已經添加了服務器端,如果沒有添加再在進行添加服務器端的操作:
<?php
$mc = new Memcached('mc');
$mc->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE, true);
if (!count($mc->getServerList())) {
$mc->addServers(array(
array('mc1.example.com',11211),
array('mc2.example.com',11211),
));
}
?>