redis哨兵模式下业务代码连接实现

目录

一:背景

二:实现过程

三:总结


一:背景

在哨兵模式下,真实的redis服务地址由一个固定ip转变为可以变化的ip,这样我们业务代码在连接redis的时候,就需要判断哪个主redis服务地址,哪个是从redis服务地址,从而进行对应的读写操作。那么如何实现呢,下面我们使用php语言来具体讲解下,如果实现这个redis操作。

二:实现过程

1:首先获取哨兵的服务地址,根据哨兵获取主,从redis的地址信息

获取主,从库地址:

#哨兵服务的地址

$sentinels = [
    ['host' => '192.168.56.101', 'port' => 5000],
    ['host' => '192.168.56.101', 'port' => 5001],
    ['host' => '192.168.56.101', 'port' => 5002],
];

$masterName = 'mymaster';
$masterInfo = $slaveInfo = [];
#循环哨兵地址,连接获取主从服务的地址
foreach ($sentinels as $sentinel) {
    $redis = new \Redis();
    try {
        $redis->connect($sentinel['host'], $sentinel['port']);
        $masterInfo = $redis->rawCommand('sentinel', 'get-master-addr-by-name', $masterName);

        $redis->close();
        if ($masterInfo) {
            $slaves = $redis->rawCommand('sentinel','slaves',$masterName);
            if (!empty($slaves)) {
                foreach ($slaves as $val){
                    $slaveInfo[]=['ip'=>$val[3],'port'=>$val[5]];
                }
            }
          break;
        }
    } catch (\Exception $e) {
        continue;
    }
}
if (!$masterInfo) {
    echo 'Redis 连接失败!';
    exit;
}
#这里获取的主服务地址只有一个
#从服务地址是一个数组列表

$rand = rand(0,1);
$slaveInfo = $slaveInfo[$rand];

#上面我们随机选择一个从地址

2:根据主从地址,进行读写操作

#链接主库,进行写操作
$masterRedis = new \Redis();
$masterRedis->connect($masterInfo[0], $masterInfo[1]);
$masterRedis->auth('123456');
if (!$masterRedis->set('test', '123')) {
    echo 'Redis 写入失败!';
    exit;
}
echo 'Redis 写入成功!' . "\n";

#连接从服务,获取信息
$salveRedis = new \Redis();
$salveRedis->connect($slaveInfo['ip'], $slaveInfo['port']);
$salveRedis->auth('123456');
if (!$salveRedis->exists('test')) {
    echo 'Redis 读取失败!';
    exit;
}
echo 'Redis 读取成功!' . $salveRedis->get('test');
三:总结

通过以上代码,我们可以根据自己的业务进行封装,获取主库进行写操作,获取从库进行读操作,可以实现哨兵模式下,redis读写分离,让我们的业务更加健壮和高可用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

攻城狮的梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值