PHP中使用redis哨兵

  1. 封装一个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);
    }

}
  1. 通过哨兵动态获取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);
    }
}
  1. 获取之后即可创建redis实例进行使用
posted @ 2020-07-12 13:30  水滴月  阅读(789)  评论(6编辑  收藏  举报