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

相关文章:

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

目录 一:背景 二:实现过程 三:总结 一:背景 在哨兵模式下,真实的redis服务地址由一个固定ip转变为可以变化的ip,这样我们业务代码在连接redis的时候,就需要判断哪个主redis服务地址,哪个是从…...

Java中将文件转换为Base64编码的字节码

在Java中,将文件转换为Base64编码的字节码通常涉及以下步骤: 读取文件内容到字节数组。使用java.util.Base64类对字节数组进行编码。 下面是一个简单的Java示例代码,演示如何实现这个过程: import java.io.File; import java.io…...

【C++高阶】探索STL的瑰宝 map与set:高效数据结构的奥秘与技巧

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C “ 登神长阶 ” 🤡往期回顾🤡:初步了解 二叉搜索树 🌹🌹期待您的关注 🌹🌹 ❀map与set 📒1.…...

cd 命令特殊路径符 mkdir命令

cd 特殊路径符 cd . 表示当前目录,比如 cd ./Desktop表示切换到当前目录下的Desktop目录内,和 cd Desktop效果一致。cd … 表示上一级目录,比如 cd … 即可切换到上一级目录,cd…/…切换到上二级目录。cd ~ 表示 HOME 目录&#…...

Mongodb UPDATE, 使用$position指定向数组中插入新元素的位置

学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第72篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题,欢迎在文章下面点个赞,或者关…...

【Kafka】Kafka Broker工作流程、节点服役与退役、副本、文件存储、高效读写数据-08

【Kafka】Kafka Broker工作流程、节点服役与退役、副本、文件存储、高效读写数据 1. Kafka Broker 工作流程1.1 Zookeeper 存储的 Kafka 信息1.2 Kafka Broker总体工作流程1.2.1 Controller介绍 1.3 Broker 重要参数 2. 节点服役与退役3. Kafka副本 1. Kafka Broker 工作流程 …...

如何恢复未格式化分区数据?看这里!

什么是未格式化分区? 未格式化或RAW文件系统的分区无法被Windows操作系统识别和挂载,因此,Windows会提示你进行格式化以创建新的文件系统。注意,不要进行格式化。通常,文件系统变为未格式化或RAW会出现以下常见错误消…...

通过“BOSS”精通比特币,深入认识私钥、账户和钱包

来源:币界原创 作者:636Marx 无论当今数字货币技术如何发展,认识区块链技术幕后的关键机制至关重要。无论您是新手还是经验丰富的数字货币从业者,掌握钱包地址、公钥和私钥的复杂性都有无可替代重要性。进入 BOSS Wallet,这是一款尖端的 Web…...

进程与线程的区别

进程(Process) 1:进程是操作系统分配资源的基本单位 2:每个进程都有自己独立的虚拟地址空间,虚拟地址空间映射真实物理地址 3:进程之间相互隔离,某一个进程的崩溃不会影响到其它进程 4&…...

【AI基础】第五步:纯天然保姆喂饭级-安装并运行chatglm3-6b

类似于 【AI基础】第三步:纯天然保姆喂饭级-安装并运行chatglm2-6b,有一些细节不一样。 此系列文章列表: 【AI基础】概览 【AI基础】第一步:安装python开发环境-windows篇_下载安装ai环境python 【AI基础】第一步:安装…...

【学习笔记】Elastic-Job和Quartz 实现企业级定时任务

Elastic-Job和Quartz 实现企业级定时任务 知识拆解框架整合Java高级玩法定时任务案例 第1章 课程介绍 课程的总体介绍,定时任务的应用场景和发展趋势,以及分布式走时任务的介绍 1-1、导学 1-2、为什么学习定时任务 1-3、定时任务技术发展趋势 1-4、主…...

舒适佩戴,享受沉浸式音乐体验,西圣AVA2耳机体验

平时不管是听音乐,还是打电话,戴上一副耳机都可以让我们获得更好的隐私性,并且在公共场所,比如办公室、车厢里,也可以获得属于自己的空间。现在市面上耳机的选择非常多,音质、续航和佩戴的舒适度是我们选择…...

c++学习-----内存管理

1. C/C内存分布 我们先来看下面的一段代码和相关问题 答案揭晓: 这里很多人会误认为*char2在常量区,这其实是错误的 因为: 首先在内存字符常量区分配一块内存空间放下”abcd\0”,然后在栈中分配一块连续的内存空间,…...

可视化数据科学平台在信贷领域应用系列七:自动机器学习(下篇)

在当今金融科技迅速发展的时代,自动机器学习(AutoML)逐步成为了信贷风控领域的重要工具。随着大数据和人工智能技术的进步以及信贷风险环境的快速变化,传统人工建模模式的时效性已经难以应对复杂多变的挑战。自动机器学习框架将数…...

OpenGL Super Bible 7th-Primitives, Pipelines, and Pixels图元、渲染管线与像素

简介 本文的原版为《OpenGL Super Bible 7th》,是同事给我的,翻译是原文+译文的形势。文章不属于机器直译,原因在于语言不存在一一对应的关系,我将尽可能的按照中国人看起来舒服的方式来翻译这些段子,如果段子让你感到身心愉悦,那还劳烦点个关注,追个更。如果我没有及时…...

SpringBoot3.0更新后,IDEA创建SpringBoot2.x项目

首先创建新项目 然后Next Type选图中对应的即可,先在这里选择JavaVersion为17,然后等会去修改这个jdk的版本,然后Next 在选择springboot版本时发现还是没有2.x的版本,继续选择一个没有后缀名的版本先,这里选择3.3.0,至…...

Linux开发讲课8--- linux的5种IO模型

一、这里IO是什么 操作系统为了保护自己,设计了用户态、内核态两个状态。应用程序一般工作在用户态,当调用一些底层操作的时候(比如 IO 操作),就需要切换到内核态才可以进行 服务器从网络接收的大致流程如下&#xff1…...

什么是云主机?

云主机是新一代的主机租借服务,它整合了高性能服务器与优质网络带宽,有用处理了传统主机租借价格偏高、服务品良莠不齐等缺陷,可全面满意中小企业、个人站长用户对主机租借服务低本钱,高牢靠,易办理的需求。   关于大…...

力扣上的经典问题:接雨水

力扣上的经典问题:接雨水 在众多的编程题库中,力扣(LeetCode)是一个非常受欢迎的平台,拥有大量的算法和数据结构练习题。其中,接雨水(Trapping Rain Water)问题因其巧妙的思路和广泛…...

双例集合(二)——双例集合的实现类之HashMap容器类

双例集合的常用实现类有HashMap和TreeMap两个,通过这两个类我们可以实现Map接口定义的容器,一般情况下使用HashMap容器类较多。 HashMap容器类是Map接口最常用的实现类,它的底层采用Hash算法来实现,这也就满足了键key不能重复的要…...

从SD卡初始化到读写文件:一个完整嵌入式项目中的SDIO驱动避坑实践

从SD卡初始化到读写文件:嵌入式SDIO驱动实战全解析 在嵌入式系统开发中,SD卡因其高容量、低成本和便携性成为数据存储的首选方案。然而,看似简单的SD卡接口背后隐藏着复杂的初始化协议和时序要求。许多工程师在项目初期都会遇到SD卡无法识别、…...

Aurora框架解析:一体化高性能云原生开发平台的设计与实践

1. 项目概述与核心价值如果你在开源社区里混迹过一段时间,尤其是对现代化、高性能的Web开发框架感兴趣,那么“Aurora”这个名字你大概率不会陌生。它不是一个简单的库或者工具,而是一个由社区驱动的、旨在构建下一代企业级应用开发平台的雄心…...

ncmdumpGUI:3步解决网易云音乐ncm格式播放限制的终极方案

ncmdumpGUI:3步解决网易云音乐ncm格式播放限制的终极方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经在网易云音乐下载了心爱的歌曲…...

从零到一:基于GD32E230核心板的PCB设计实战与模块化解析

1. GD32E230核心板硬件设计基础 第一次拿到GD32E230这颗国产MCU时,说实话有点小激动。作为兆易创新基于Cortex-M23内核的拳头产品,它用55nm工艺把芯片面积压缩到了惊人的3x3mm,却集成了5个定时器、2个SPI、2个I2C这些实用外设。我在去年一个智…...

终极显卡调校指南:如何用NVIDIA Profile Inspector释放游戏性能

终极显卡调校指南:如何用NVIDIA Profile Inspector释放游戏性能 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector NVIDIA Profile Inspector是一款专为NVIDIA显卡用户设计的免费优化工具&…...

构建个人代码仓库:提升开发效率的实践指南

1. 项目概述:一个面向21世纪开发者的代码仓库最近在GitHub上看到一个挺有意思的项目,叫“21st-dev/1code”。光看这个名字,你可能觉得有点抽象,但点进去之后,我发现它其实是一个挺有想法的代码仓库。这个项目没有复杂的…...

AI原生产品管理:多智能体协作如何重塑产品开发工作流

1. 项目概述:当AI成为你的产品经理最近在GitHub上看到一个挺有意思的项目,叫NathanJCW/ai-native-pm-cortex。光看名字,你大概能猜到它想做什么——“AI原生的产品经理大脑”。这可不是一个简单的聊天机器人插件,它试图构建一个完…...

TransPrompt:结构化提示词工程,提升LLM应用开发效率

1. 项目概述:当提示词工程遇上结构化工具最近在折腾大语言模型应用开发的朋友,估计都绕不开一个核心痛点:如何高效、稳定地管理那些越来越复杂、越来越长的提示词(Prompt)。直接写在代码里?改起来麻烦&…...

用Ruby实现RISC-V模拟器:从指令集架构到交互式教学工具

1. 项目概述:一个为Ruby语言量身打造的RISC-V模拟器如果你是一名Ruby开发者,或者对RISC-V这个新兴的指令集架构充满好奇,那么你很可能已经听说过RuriOSS/rurima这个名字。简单来说,这是一个用Ruby语言实现的RISC-V指令集模拟器。但…...

基于Go的轻量级自托管IM系统OpenWhisp部署与架构解析

1. 项目概述:一个开源的即时通讯解决方案最近在折腾一个内部协作工具,需要集成一个轻量级的即时通讯模块。市面上成熟的方案不少,但要么是SaaS服务,数据不在自己手里,心里不踏实;要么是像Rocket.Chat、Matt…...