• 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 applibredisRedis 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实例进行使用
  • 相关阅读:
    查windows系统开关机记录
    HDU-6278-Jsut$h$-index(主席树)
    POJ-2104-Kth Number(主席树)
    HDU-6546-Function(贪心)
    POJ-1523-SPF(求割点)
    POJ-2762-Going from u to v or from v to u(强连通, 拓扑排序)
    POJ-2552-The Bottom of a Graph 强连通分量
    POJ-1659-Frogs' Neighborhood
    POJ-1904-King‘s Quest
    POJ-1236-Network of Schools
  • 原文地址:https://www.cnblogs.com/lty-fly/p/13288111.html
Copyright © 2020-2023  润新知