//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);
}
pdo/mysql和redis断线重连的实现
猜你喜欢
转载自blog.csdn.net/moliyiran/article/details/103434536
今日推荐
周排行