/** * choose master or slave * * @param string $sql */ private static function _switch($sql) { $select = false; $uid = Login::GetCurrentUserId(); $callback = 'DB::_switch'; $args = array($uid); $key = Memcache::GetFunctionKey($callback, $args); if (false === stripos($sql, 'SELECT')) { if ($uid) { // master $flag = 0; $value = 1; Memcache::Instance()->Set($key, $value, $flag, self::$life); } } elseif (rand(0, 1)) { // %50 to master } else { $value = Memcache::Instance()->Get($key); if (!$value) { //slave $select = 1; } } return self::_getConn($select); }