当前位置: 首页 > news >正文

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读写分离,让我们的业务更加健壮和高可用。

http://www.lryc.cn/news/378983.html

相关文章:

  • Java中将文件转换为Base64编码的字节码
  • 【C++高阶】探索STL的瑰宝 map与set:高效数据结构的奥秘与技巧
  • cd 命令特殊路径符 mkdir命令
  • Mongodb UPDATE, 使用$position指定向数组中插入新元素的位置
  • 【Kafka】Kafka Broker工作流程、节点服役与退役、副本、文件存储、高效读写数据-08
  • 如何恢复未格式化分区数据?看这里!
  • 通过“BOSS”精通比特币,深入认识私钥、账户和钱包
  • 进程与线程的区别
  • 【AI基础】第五步:纯天然保姆喂饭级-安装并运行chatglm3-6b
  • 【学习笔记】Elastic-Job和Quartz 实现企业级定时任务
  • 舒适佩戴,享受沉浸式音乐体验,西圣AVA2耳机体验
  • c++学习-----内存管理
  • 可视化数据科学平台在信贷领域应用系列七:自动机器学习(下篇)
  • OpenGL Super Bible 7th-Primitives, Pipelines, and Pixels图元、渲染管线与像素
  • SpringBoot3.0更新后,IDEA创建SpringBoot2.x项目
  • Linux开发讲课8--- linux的5种IO模型
  • 什么是云主机?
  • 力扣上的经典问题:接雨水
  • 双例集合(二)——双例集合的实现类之HashMap容器类
  • oracle-定时器(job)
  • cron.timezone
  • Hadoop+Spark大数据技术(测试)
  • 使用新语法连接Qt 5中重载的信号和槽
  • 梯度提升决策树(GBDT)的训练过程
  • 路由器的Wi-Fi性能是否限制了你的网速?这里有你想要的答案
  • 简站WordPress是最简洁好用易上手的wordpress企业建站主题
  • 阿里云 debian10.3 sudo apt-get updat 报错的解决方案
  • vite中使用scss技巧
  • PyQt5/Pyside2学习记录
  • 记一次通过脚本来实现自定义容器的自动重启