PHP中使用redis哨兵
阿新 • • 發佈:2020-07-12
- 封裝一個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例項進行使用