- 封裝一個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執行個體進行使用