Memcached PHP模块:如何判断连接是否失败?

Memcached PHP模块:如何判断连接是否失败?,php,memcached,Php,Memcached,在php文件中,我有: <?php $m = new Memcached(); echo get_class($m); echo "<br>"; echo $m->addServer('192.168.1.77', 11211, 1); $m->set("foo", "bar"); ?> 如果我停止memcached,大约5秒钟后,我会得到: Memcached 1 我期待着更像 Memcached 0 如何知道是否已成功命中memcached服务器?我

在php文件中,我有:

<?php
$m = new Memcached();
echo get_class($m);
echo "<br>";
echo $m->addServer('192.168.1.77', 11211, 1);
$m->set("foo", "bar");
?>
如果我停止memcached,大约5秒钟后,我会得到:

Memcached
1
我期待着更像

Memcached
0
如何知道是否已成功命中memcached服务器?我完全希望它像addServer返回值一样简单…:(

声明

使用此方法时(与Memcache::connect()和Memcache::pconnect()相反),直到实际需要时才建立网络连接

因此,
addServer
无法知道网络连接是否已建立


改用

这正是我想要的:Memcached::getStats()

因此,我写道:

add_memcached_server($m, $addr, $port)
{
    $m->addServer($addr,$port);
    $statuses = $m->getStats();
    return isset($statuses[$addr.":".$port]);
}
工作起来像个符咒…

答案是

   /**
   * check for connection was established
   * @param resource $m
   * @param string $host
   * @param int $port
   * @access public
   * @return bool
   */
   function memConnected($m, $host, $port = 11211)
   {
      $statuses = $m->getStats();
      return (isset($statuses[$host.":".$port]) and $statuses[$host.":".$port]["pid"] > 0);
   }
我就是这样做的

/**
 * Add memcached server
 * @param String $new_ New Memcahed
 * @param String $addr Address
 * @param String $port Port
 * @return boolean
 */
function add_memcached_server($new_, $addr, $port)
{
    $new_->addServer($addr,$port);
    $statuses = $new_->getStats();
    if($statuses[$addr.':'.$port]['uptime']<1){
        return false;
    }else{
        return true;
    }
}
/**
*添加memcached服务器
*@param String$new\uuunew Memcahed
*@param String$addr地址
*@param String$port端口
*@返回布尔值
*/
函数add\u memcached\u server($new\u、$addr、$port)
{
$new->addServer($addr,$port);
$statuses=$new->getStats();

如果($statuses[$addr.':'.$port]['uptime']哦,是的……有人知道memcached php模块的官方文档在哪里,名称是“memcached”,带有“d”?当他们将其命名为与守护进程完全相同的名称时,试图找到实际文档是多么令人沮丧……啊!那么$m->addServer('192.168.1.77',11211,1)是什么呢;返回?它每次返回
1
。无论我的memcached守护程序是否在该IP上运行……我能找到的成功连接和失败连接之间的唯一区别是set()将挂起执行,直到连接超时。是否先刷新?例如:启动、分配、刷新、停止和检查即使此答案正确,
connect
也不能替换为
addServer
,因为当您有多个memcached服务器时,会使用后者。我正在使用
memcached
(与没有
d
memcache
相反)connect在名为“memcached”的php模块中不存在:在没有SASL身份验证的情况下,使用SASL连接到Memcached时,这不起作用。您还需要检查
pid
,因为如果添加了服务器但未连接,它仍会显示在统计信息中,但使用
pid=-1
,因此我建议:
返回($statuses[$addr.:“$port]['pid']>0);
/**
 * Add memcached server
 * @param String $new_ New Memcahed
 * @param String $addr Address
 * @param String $port Port
 * @return boolean
 */
function add_memcached_server($new_, $addr, $port)
{
    $new_->addServer($addr,$port);
    $statuses = $new_->getStats();
    if($statuses[$addr.':'.$port]['uptime']<1){
        return false;
    }else{
        return true;
    }
}