Php Redis可用性检查
在使用redis之前,我想检查它的可用性,如果redis不可用,我将使用mysql,如果redis可用,我将使用它。如果我使用predis客户端,我该怎么做 我的第一个方法是:Php Redis可用性检查,php,redis,Php,Redis,在使用redis之前,我想检查它的可用性,如果redis不可用,我将使用mysql,如果redis可用,我将使用它。如果我使用predis客户端,我该怎么做 我的第一个方法是: /** * @return bool */ public function check(){ if(!@fsockopen ( $server['host'], $server['port'], $errno, $errstr, 3 )){ De
/**
* @return bool
*/
public function check(){
if(!@fsockopen ( $server['host'], $server['port'], $errno, $errstr, 3 )){
Debug::instance()->log( 'Redis connect error host: ' . $server['host'] . ' port: ' . $server['port'] );
return false;
}
return true;
}
但这是一个非常糟糕的主意,因为我占用了免费的插座。现在我尝试找到一个更好的方法。使用predis客户端和命令
- 如果收到作为响应的
,则返回truePONG
- 在
上返回false通信异常
如果mysql也不可用呢?你的方法是错误的:如果用户/管理员已经为你的代码提供了Redis的配置,那么假设它在那里并且应该被使用。如果没有,处理它,例如失败并抱怨配置错误。你的问题是什么?你尝试过的更好的方法是什么?我很抱歉犯了一个问题。现在我试图找到一个更好的方法。Mysql始终是可用的,但是如果请求太多,redis将对所有请求都有问题,在那一刻,我想将部分请求移动到Mysql。所以我想知道redis能否处理这个请求。
// Redis configuration
$vm = array(
'host' => '127.0.0.1',
'port' => 6379,
'timeout' => 0.8 // (expressed in seconds) used to connect to a Redis server after which an exception is thrown.
);
$redis = new Predis\Client($vm);
try {
$redis->ping();
} catch (Exception $e) {
// LOG that redis is down : $e->getMessage();
}
if(isset($e)) {
//use MySQL
} else {
/* Use Redis */
}