pdo/mysql和redis断线重连的实现

//pdo/mysql和redis断线重连的实现
    //TODO:DB初始化
    $pdo = new \PDO($this->dbConfig['dsn'], $this->dbConfig["username"], $this->dbConfig["password"],array(\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION));
    $pdo->exec("SET NAMES '" . $this->dbConfig["charset"] . "' COLLATE '" . $this->dbConfig["collation"] . "'");
    $pdo->exec("SET CHARACTER SET '" . $this->dbConfig["charset"] . "'");
    $pdo->setAttribute(\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::FETCH_OBJ);

    //TODO:redis初始化
    $redis = new \Redis();
    $redis->pconnect($this->redisConfig['host'], $this->redisConfig['port']);
    $redis->auth($this->redisConfig['passwd']);

    if(isset($this->redisConfig['options'])){
        foreach ($this->redisConfig['options'] as $option=>$value){
            $redis->setOption($option, $value);
        }
    }                //TODO:redis和mysql连接状态检测
    try{
        echo "Redis ACK\n";
        $ping = $redis->Ping();//获取ping标识
        if(stristr($ping, 'PONG') === false){
            throw new \Exception("Redis Connect Getway", 1000);
        }
    }catch (\Exception $e){
        //TODO:redis初始化
        echo "Redis连接断开,重新初始化\n";
        $redis = new \Redis();
        $redis->pconnect($this->redisConfig['host'], $this->redisConfig['port']);
        $redis->auth($this->redisConfig['passwd']);

        if(isset($this->redisConfig['options'])){
            foreach ($this->redisConfig['options'] as $option=>$value){
                $redis->setOption($option, $value);
            }
        }

        continue;
    }

    try{
        echo "MySQL ACK\n";
        $sql = "SELECT bl_uuid FROM battle_log LIMIT 1";
        $pdo->query($sql);
    }catch (\PDOException $e){
        echo "PDO 连接断开,重新初始化\n";
        $pdo = new \PDO($this->dbConfig['dsn'], $this->dbConfig["username"], $this->dbConfig["password"],array(\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION));
        $pdo->exec("SET NAMES '" . $this->dbConfig["charset"] . "' COLLATE '" . $this->dbConfig["collation"] . "'");
        $pdo->exec("SET CHARACTER SET '" . $this->dbConfig["charset"] . "'");
        $pdo->setAttribute(\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::FETCH_OBJ);
    }
发布了64 篇原创文章 · 获赞 26 · 访问量 36万+

猜你喜欢

转载自blog.csdn.net/moliyiran/article/details/103434536
今日推荐