以下获取mc服务器的代码存在问题

<?php

function __getMc(){
    static $__mc;
    if(!empty($__mc) && $__mc instanceof Memcache)
        return $__mc;
    else {
        $__mc = new Memcache;
        $__mc->connect(MC_HOST, MC_PORT, MC_CONNECT_TIMEOUT);
        return $__mc;
    }
}

 

当mc设置了timeout时,在一段时间后,Server自动关闭连接,此时$__mc其实是未连接的,但是验证条件

!empty($__mc) && $__mc instanceof Memcache

会得出true,此时将返回未连接的Mc类,对其进行set、get都将失败。

改进:在判断条件中增加对mc的访问来确定是否连接还在,如可以调用getStats()函数,判断返回值是否为false。或者调用version()函数还验证。

 posted on 2012-12-18 15:09  so_  阅读(197)  评论(0编辑  收藏  举报