PHP中使用redis哨兵

Posted 水滴月

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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实例进行使用

以上是关于PHP中使用redis哨兵的主要内容,如果未能解决你的问题,请参考以下文章

Redis的哨兵(Sentinel)分析

Redis主从与哨兵架构详解 Redis主从架构 如何在同一台机器搭建主从架构 Redis主从工作原理 数据部分复制 Jedis使用 Redis的管道(Pipeline) Redis Lua脚本(代码

Redis的哨兵模式和集群模式

基于哨兵sentinel模式的redis服务集群并与spring集成

Redis哨兵架构(哨兵搭建,哨兵原理)

1 Redis哨兵与多个redis哨兵?