redis客户端通过哨兵获取主机、从机信息

本文介绍了一种利用哨兵机制实现Redis客户端高可用性的方案。客户端通过随机选择哨兵节点获取主从信息,并采用轮询方式访问从节点,增强了系统的稳定性和负载均衡能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Master可能会因为某些情况宕机了,如果在客户端是固定一个地址去访问,肯定是不合理的,所以客户端请求是请求哨兵,从哨兵获取主机地址的信息,或者是从机的信息。可以实现一个例子
1、随机选择一个哨兵连接,获取主机、从机信息
2、模拟客户端定时访问,实现简单轮训效果,轮训从节点
3、连接失败重试访问

vim client.php

include  'Round.php';

$sentinelConf=[
    ['ip'=>'192.168.11.43','port'=>22530],
    ['ip'=>'192.168.11.43','port'=>22531],
    ['ip'=>'192.168.11.43','port'=>22532]
];
//随机访问
$sentinelInfo=$sentinelConf[array_rand($sentinelConf)];


$redis=new Redis();
$redis->connect($sentinelInfo['ip'],$sentinelInfo['port']);
//获取redis-slave 从节点信息
$slavesInfo=$redis->rawCommand('SENTINEL','slaves','mymaster');
$slaves=[];
foreach ($slavesInfo as $val){
    $slaves[]=['ip'=>$val[3],'port'=>$val[5]];
}

//加载到缓存当中,可以记录这次访问的时间跟上次的访问时间

//模拟客户端访问
swoole_timer_tick(600,function () use($slaves) {
       //轮训
        $slave=(new Round())->select($slaves);
        try{
            $redis=new Redis();
            $redis->connect($slave['ip'],$slave['port']);
            var_dump($slave,$redis->get('peter'));
        }catch (\RedisException $e){

        }

});

vim Round.php

class Round{
     static  $lastIndex=0;

     public  function select($list){
            $currentIndex=self::$lastIndex; //当前的index
            $value=$list[$currentIndex];
            if($currentIndex+1>count($list)-1){
                self::$lastIndex=0;
            }else{
                self::$lastIndex++;
            }
            return $value;
     }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值