PHP中使用redis哨兵
- 封装一个redis操作,代码如下:
class Redis {
use Singleton;
public static $redis = "";
//私有化构造函数
private function __construct()
{
// if (!extension_loaded('redis')) {
// throw new \Exception("redis.so文件不存在");
// }
try {
//获取redis配置
$redisConfig = Config::get("redis");
//var_dump($redisConfig);
self::$redis = new \Redis();
$result = self::$redis->connect($redisConfig['host'], $redisConfig['port'], $redisConfig['time_out']);
} catch (\Exception $e) {
throw new \Exception("redis服务异常");
}
if ($result === false) {
throw new \Exception("redis连接失败");
}
}
/**
* 魔术方法静态调用
* @param $method_name // 调用的redis方法名
* @param $param // 调用redis方法时传递的参数
* @return mixed
*/
// public function __call($method_name, $param)
// {
// if (!self::$redis) {
// self::getInstance();
// }
// try {
// return call_user_func_array([self::$redis, $method_name], $param);
// } catch (\Exception $e) {
// print $e->getMessage();
// exit;
// }
// }
//私有化克隆方法
public function __clone()
{
// TODO: Implement __clone() method.
}
/**
* 魔术方法调用redis中的方法
* @param $method_name
* @param $arguments
* @return mixed
*/
public function __call($method_name, $arguments)
{
return self::$redis->$method_name(...$arguments);
}
}
- 通过哨兵动态获取redis的主从配置
use app\lib\redis\Redis as MyRedis;
class Index
{
public function index()
{
$redis = MyRedis::getInstance();
//获取redis master的状态信息
$masterInfo = $redis->rawCommand('SENTINEL', 'masters');
$master = $redis->rawCommand("SENTINEL", 'master', 'mymaster');
//获取redis slaves的信息
$slaves = $redis->rawCommand("SENTINEL", 'slaves', 'mymaster');
dump($slaves);
}
}
- 获取之后即可创建redis实例进行使用