以下获取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()函数还验证。