【23.12.29期--Redis缓存篇】谈一谈Redis的集群模式
谈一谈Redis的集群模式
- ✔️ 谈一谈Redis的集群模式
- ✔️主从模式
- ✔️ 特点
- ✔️Redis主从模式Demo
- ✔️哨兵模式
- ✔️Redis哨兵模式Demo
- ✔️特点
- ✔️Cluster模式
- ✔️Redis Cluster模式Demo
- ✔️特点
✔️ 谈一谈Redis的集群模式
Redis有三种主要的集群模式,用于在分布式环境中实现高可用性和数据复制。这些集群模式分别是:主从复制(Master-Slave Replication) 、哨兵模式 (Sentinel) 和Redis Cluster模式。
✔️主从模式
主从复制是Redis最简单的集群模式。这个模式主要是为了解决单点故障的问题,所以将数据复制多个副本中,这样即使有一台服务器出现故障,其他服务器依然可以继续提供服务。
主从模式中,包括一个主节点(Master)和一个或多个从节点(Save) 。主节点负责处理所有写操作和读操作而从节点则复制主节点的数据,并且只能处理读操作。当主节点发生故障时,可以将一个从节点升级为主节点,实现故转移(需要手动实现)。
主从复制的优势在于简单易用,适用于读多写少的场景。它提供了数据备份功能,并且可以有很好的扩展性,只要增加更多的从节点,就能让整个集群的读的能力不断提升。
但是主从模式最大的缺点,就是不具备故障自动转移的能力,没有办法做容错和恢复。
主节点和从节点的宕机都会导致客户端部分读写请求失败,需要人工介入让节点恢复或者手动切换一台从节点服务器变成主节点服务器才可以。并且在主节点宕机时,如果数据没有及时复制到从节点,也会导致数据不一致。
✔️ 特点
主从模式的优点:
- 数据冗余:提高数据可靠性和可用性。
- 读负载分担:减轻主节点负载,提高系统吞吐量和响应性能。
- 故障恢复:实现故障自动恢复。
主从模式的缺点:
- 配置和管理复杂。
- 数据一致性问题。
- 资源消耗:需要额外服务器资源。
✔️Redis主从模式Demo
确保已安装并配置好Redis服务器,并启动主节点和从节点。
添加Jedis库依赖。如果使用Maven,请在pom.xml文件中添加以下依赖:
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.7.0</version>
</dependency>
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisMaster;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPubSub;
import java.util.HashSet;
import java.util.Set; public class RedisMasterSlaveExample { public static void main(String[] args) { // 创建主节点连接池 JedisPool masterPool = new JedisPool("localhost", 6379); // 从连接池中获取主节点连接 Jedis master = masterPool.getResource(); master.auth("your_password"); // 如果设置了密码,请进行认证 master.flushAll(); // 清空主节点数据,可选操作 // 创建从节点连接池 JedisPool slavePool = new JedisPool("localhost", 6380); // 从节点的端口号可能与主节点不同 // 从连接池中获取从节点连接 Jedis slave = slavePool.getResource(); slave.auth("your_password"); // 如果设置了密码,请进行认证 slave.flushAll(); // 清空从节点数据,可选操作 // 配置主从复制 master.slaveof("yes", "localhost", 6380); // 将当前服务器配置为另一个服务器的从服务器 slave.sync(); // 同步所有键到从节点,也可以选择同步特定键 // 发布和订阅示例(可选) Set<String> channels = new HashSet<>(); channels.add("testChannel"); // 订阅的频道名称 slave.psubscribe(new JedisPubSub() { // 在从节点上订阅频道消息 @Override public void onPMessage(String channel, String message) { // 接收到消息时的回调方法 System.out.println("Received message on " + channel + ": " + message); } }, channels); master.publish("testChannel", "Hello from master!"); // 在主节点上发布消息到频道中,从节点会接收到该消息 }
}
✔️哨兵模式
为了解决主从模式的无法自动容错及恢复的问题,Redis引入了一种哨兵模式的集群架构。
哨兵模式是在主从复制的基础上加入了哨兵节点。哨兵节点是一种特殊的Redis节点,用于监控主节点和从节点的状态。当主节点发生故障时,哨兵节点可以自动进行故障转移,选择一个合适的从节点升级为主节点,并通知其他从节点和应用程序进行更新。
在原来的主从架构中,引入哨兵节点,其作用是监控Redis主节点和从节点的状态。每个Redis实例都可以作为哨兵节点,通常需要部署多个哨兵节点,以确保故障转移的可靠性。
哨兵节点定期向所有主节点和从节点发送PING命令,如果在指定的时间内未收到PONG响应,哨兵节点会将该书点标记为主观下线。如果一个主节点被多数哨兵节点标记为主观下线,那么它将被标记为客观下线。
当主节点被标记为客观下线时,哨兵节点会触发故障转移过程。它会从所有健康的从节点中选举一个新的主节点并将所有从节点切换到新的主节点,实现自动故障转移。同时,哨兵节点会更新所有客户端的配置,指向新的主节点。
哨兵节点通过发布订阅功能来通知客户端有关主节点状态变化的消息。客户端收到消息后,会更新配置,将新的主节点信息应用于连接池,从而使客户端可以继续与新的主节点进行交互。
✔️Redis哨兵模式Demo
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisSentinelPool; public class RedisSentinelExample { public static void main(String[] args) { // 创建哨兵连接池 String masterName = "mymaster"; // 哨兵配置中的主节点名称 String sentinelHost = "localhost"; // 哨兵节点的地址 int sentinelPort = 26379; // 哨兵节点的端口号 Set<String> sentinels = new HashSet<>(); sentinels.add(sentinelHost + ":" + sentinelPort); // 添加一个或多个哨兵节点地址 JedisSentinelPool sentinelPool = new JedisSentinelPool(masterName, sentinels); // 从连接池中获取连接 Jedis jedis = sentinelPool.getResource(); jedis.auth("your_password"); // 如果设置了密码,请进行认证 // 执行一些操作,例如设置和获取数据 jedis.set("key", "value"); String value = jedis.get("key"); System.out.println("Value: " + value); // 关闭连接池和连接 jedis.close(); sentinelPool.close(); }
}
✔️特点
这个集群模式的优点就是为整个集群系统了一种故障转移和恢复的能力。
✔️Cluster模式
Redis Cluster是Redis中推荐的分布式集群解决方案,它将数据自动分片到多个节点上,每个节点负责一部分数据。
Redis Cluster采用主从复制模式来提高可用性。每个分片都有一个主节点和多个从节点。主节点负责处理写操作,而从节点负责复制主节点的数据并处理读请求。
Redis Cluster能够自动检测节点的故障。当一个节点失去连接或不可达时,Redis Cluster会尝试将该节点标记为不可用,并从可用的从节点中提升一个新的主节点。
Redis Cluster是适用于大规模应用的解决方案,它提供了更好的横向扩展和容错能力。它自动管理数据分片和故障转移,减少了运维的负担。
✔️Redis Cluster模式Demo
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisClusterConnectionHandler;
import redis.clients.jedis.JedisPoolConfig; import java.util.HashSet;
import java.util.Set; public class RedisClusterExample { public static void main(String[] args) { // 创建集群连接池配置 JedisPoolConfig poolConfig = new JedisPoolConfig(); // 设置连接池参数 poolConfig.setMaxTotal(100); // 连接池最大连接数 poolConfig.setMaxIdle(50); // 连接池最大空闲数 poolConfig.setMinIdle(10); // 连接池最小空闲数 poolConfig.setTestOnBorrow(true); // 获取连接时进行有效性检查 poolConfig.setTestOnReturn(true); // 归还连接时进行有效性检查 poolConfig.setTestWhileIdle(true); // 空闲时定期进行有效性检查 // 创建集群连接处理器 JedisClusterConnectionHandler connectionHandler = new JedisClusterConnectionHandler(); Set<HostAndPort> jedisClusterNodes = new HashSet<>(); // 添加集群节点,包括每个节点的地址和端口号 jedisClusterNodes.add(new HostAndPort("127.0.0.1", 7379)); jedisClusterNodes.add(new HostAndPort("127.0.0.1", 7380)); jedisClusterNodes.add(new HostAndPort("127.0.0.1", 7381)); // ...添加更多节点 connectionHandler.setClusterNodes(jedisClusterNodes); connectionHandler.setPoolConfig(poolConfig); connectionHandler.setPassword("your_password"); // 如果设置了密码,请进行认证 // 创建集群连接对象并执行操作 JedisCluster jedisCluster = new JedisCluster(connectionHandler); jedisCluster.set("key", "value"); // 设置键值对 String value = jedisCluster.get("key"); // 获取键值对 System.out.println("Value: " + value); // 关闭集群连接对象和连接处理器 jedisCluster.close(); connectionHandler.close(); }
}
在这个Demo中,使用JedisCluster类来与Redis Cluster模式进行交互。首先,我们创建了一个JedisPoolConfig对象来配置连接池的参数。然后,我们创建了一个JedisClusterConnectionHandler对象来处理集群节点的连接。接下来,我们将集群节点添加到连接处理器中,并设置连接池配置和密码(如果设置了密码)。最后,我们创建了一个JedisCluster对象来执行操作,并使用set和get方法来设置和获取键值对。在完成后,我们关闭了集群连接对象和连接处理器。请注意,这只是一个简单的示例,实际应用中可能需要更多的配置和错误处理。
✔️特点
Cluster模式的特点是数据分片存诸在不同的节点上,每人节点都可以单独对外提供读写服务。不存在单点故障的问题。
相关文章:
【23.12.29期--Redis缓存篇】谈一谈Redis的集群模式
谈一谈Redis的集群模式 ✔️ 谈一谈Redis的集群模式✔️主从模式✔️ 特点✔️Redis主从模式Demo ✔️哨兵模式✔️Redis哨兵模式Demo✔️特点 ✔️Cluster模式✔️Redis Cluster模式Demo✔️特点 ✔️ 谈一谈Redis的集群模式 Redis有三种主要的集群模式,用于在分布…...
【算法挨揍日记】day34——647. 回文子串、5. 最长回文子串
647. 回文子串 647. 回文子串 题目描述: 给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 具有不同开始位置或结束位置的子串&am…...
欧科云链研究院:奔赴2024,Web3与AI共振引爆数字时代潘多拉魔盒
出品|欧科云链研究院 2024年,Web3与AI两个数字科技的巅峰碰撞,欧科云链研究院探索AI与Web3的技术融合,与澎湃科技联合发布2024年展望,原标题为《2024年展望:Web3与AI共振引爆可信数字社会》,共…...
【Py/Java/C++三种语言OD2023C卷真题】20天拿下华为OD笔试之【数学】2023C-素数之积【欧弟算法】全网注释最详细分类最全的华为OD真题题解
文章目录 题目描述与示例题目描述输入描述输出描述示例输入输出说明 解题思路暴力解质数筛 代码PythonJavaC时空复杂度 华为OD算法/大厂面试高频题算法练习冲刺训练 题目描述与示例 题目描述 RSA加密算法在网络安全世界中无处不在,它利用了极大些数因数分解的闲难…...
uniapp路由
1、路由登记 uni-app页面路由为框架统一管理,开发者需要在pages.json里配置每个路由页面的路径及页面样式。 类似小程序在 app.json 中配置页面路由一样。 所以 uni-app 的路由用法与 Vue Router 不同,如仍希望采用 Vue Router 方式管理路由,…...
湖南大学-数据库系统-2023期末考试【原题】
前言 早上11:00考完的考试,下午回来打了三把LOL之后,凭着回忆把题目重现出来了。 在复习的时候刷了15,16,17,18,19,21六年的卷子,感觉题目都差不多,但是难度…...
【Java EE初阶九】多线程案例(线程池)
一、线程池的引入 引入池---->主要是为了提高效率; 最开始,进程可以解决并发编程的问题,但是代价有点大了,于是引入了 “轻量级进程” ---->线程 线程也能解决并发编程的问题,而且线程的开销比进程要小的多&…...
理解 Node.js 中的事件循环
你已经使用 Node.js 一段时间了,构建了一些应用程序,尝试了不同的模块,甚至对异步编程感到很舒适。但是有些事情一直在困扰着你——事件循环(Event Loop)。 如果你像我一样,花费了无数个小时阅读文档和观看…...
Mac 软件出现「意外退出」及「打不开」解决方法
Mac 软件出现「意外退出」及「打不开」解决方法 软件出现意外退出及软件损坏的情况,这是因为苹果删除了TNT的证书,所以大部分TNT破解的Mac软件会出现无法打开,提示意外退出。 终端需先安装Xcode或Apple命令行工具 如未装Xcode可以使用下列命…...
随机森林 3(代码)
通过随机森林 1和随机森林 2 的介绍,相信大家对理论已经了解的很透彻,接下来带大家敲一下代码,不懂得可以加我入群讨论。 第一份代码是比较原始的代码,第二份代码是第一段代码中引用的primitive_plot,第三份代码是使用…...
勒索事件急剧增长,亚信安全发布《勒索家族和勒索事件监控报告》
近期(12.15-12.21)态势快速感知 近期全球共发生了247起攻击和勒索事件,勒索事件数量急剧增长。 近期需要重点关注的除了仍然流行的勒索家族lockbit3以外,还有本周top1勒索组织toufan。toufan是一个新兴勒索组织,本周共发起了108起勒索攻击&a…...
LeetCode1523. Count Odd Numbers in an Interval Range
文章目录 一、题目二、题解 一、题目 Given two non-negative integers low and high. Return the count of odd numbers between low and high (inclusive). Example 1: Input: low 3, high 7 Output: 3 Explanation: The odd numbers between 3 and 7 are [3,5,7]. Exam…...
E中国铜金属行业需求前景及未来发展机遇分析报告2024-2030年
E中国铜金属行业需求前景及未来发展机遇分析报告2024-2030年 &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 《报告编号》: BG471816 《出…...
python SVM 保存和加载模型参数
在 Python 中,你可以使用 scikit-learn 库中的 joblib 或 pickle 模块来保存和加载 SVM 模型的参数。以下是一个简单的示例代码,演示了如何使用 joblib 模块保存和加载 SVM 模型的参数: 保存模型参数: from sklearn import svm …...
JAVA进化史: JDK12特性及说明
JDK 12于2019年3月发布。这个版本相对于之前的版本来说规模较小,主要集中在一些改进和实验性的特性上。以下是JDK 12的一些主要特性: 引入了实验性的Shenandoah垃圾收集器 JDK 12引入了实验性的Shenandoah垃圾收集器,旨在实现极低的暂停时间…...
Databend 的算力可扩展性
作者:尚卓燃(PsiACE) 澳门科技大学在读硕士,Databend 研发工程师实习生 Apache OpenDAL(Incubating) Committer PsiACE (Chojan Shang) GitHub 对于大规模分布式数据处理系统,为了更好应对数据、流量、和复杂性的增长…...
「解析」Windows 如何优雅使用 Terminal
所谓工欲善其事必先利其器,对于开发人员 Linux可能是首选,但是在家学习的时候,我还是更喜欢使用 Windows系统,首先是稳定,其次是习惯了。当然了,我还有一台专门安装 Linux系统的小主机用于学习Linux使用&am…...
Linux第18步_安装“Ubuntu系统下的C语言编译器GCC”
Ubuntu系统没有提供C/C的编译环境,因此还需要手动安装build-essential软件包,它包含了 GNU 编辑器,GNU 调试器,和其他编译软件所必需的开发库和工具。本节用于重点介绍安装“Ubuntu系统下的C语言编译器GC&a…...
【Linux】Linux 基础命令 crontab命令
1.crontab命令 crond 是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务 工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动…...
14:00面试,14:08就出来了,问的问题过于变态了。。。
从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到10月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40…...
Ubuntu envs setting
1. change the chmod of folders sudo chown -R $USER:$USER /home/anaconda3 2. torch.cuda.is_available()返回false change conda installation to pip. zai qi ta huan jing pei zhi dou mei wen ti de qing kuang xia , zai shi shi zhe ge fang fa. # CUDA 11.7 con…...
Windows 下用 C++ 调用 Python
文章目录 Part.I IntroductionChap.I InformationChap.II 预备知识 Part.II 语法Chap.I PyRun_SimpleStringChap.II C / Python 变量之间的相互转换 Part.III 实例Chap.I 文件内容Chap.II 基于 Visual Studio IDEChap.III 基于 cmakeChap.IV 运行结果 Part.IV 可能出现的问题Ch…...
九州金榜|家庭教育一招孩子不在任性
有一次和朋友一块聚餐,邻座是一位妈妈、和她大概七八岁的儿子,小男孩长得很帅气,没有像同龄人那样调皮捣乱,而是和妈妈很温馨的就餐。 看的出来一家人的素质很高,就餐过程中桌面保持的很整洁,交流声音也不…...
爬虫案列 --抖音视频批量爬取
""" 项目名称: 唯品会商品数据爬取 项目描述: 通过requests框架获取网页数据 项目环境: pycharm && python3.8 作者所属: 几许1. 对主页抓包 , 鼠标移动到视频位置视频自动播放获得视频数据包 2. 对视频数据包地址进行解析 , 复制链接 , 进行检索 3. 获…...
【React系列】React中的CSS
本文来自#React系列教程:https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. React中的css方案 1.1. react 中的 css 事实上,css 一直是 React 的痛点,也是被很多开发…...
基于Kettle开发的web版数据集成开源工具(data-integration)-应用篇
目录 📚第一章 基本流程梳理📗页面基本操作📗对应后台服务流程 📚第二章 二开思路📗前端📗后端 🔼上一集:基于Kettle开发的web版数据集成开源工具(data-integration)-介绍篇 *️⃣主…...
51单片机三种编译模式的相互关系
51单片机三种编译模式的相互关系 编译模式默认存储类型RAM使用规模变量使用特点SAMLLdata128B片内RAM使用规模CPU访问数据速度快,但存储容量较小COMPACTpdata258B片外分页RAM速度和容量介于上下两者之间LARGExdata64KB片外RAMCPU访问数据的速度较慢,但存…...
java 千帆大模型 流式返回
聊天有两个接口,第一个是获取token, 第二个是聊天接口,具体参照官方文档 下面是流式调用聊天接口,单次的,不含上下文 Value("${qianfan.apiKey}")private String apiKey;Value("${qianfan.secretKey}")private String secretKey;Value("${qianfan.to…...
全新互联网洗衣洗鞋小程序平台新模式
互联网洗衣洗鞋新模式, 全新软件升级 对接各大平台 扩大营销渠道,增加效益!...
js 对于一些脚本中对于url的一些参数获取
js 对于一些脚本中对于url的一些参数获取 获取当前浏览器的链接上的参数(不使用vue / react 等框架)仅用在一些脚本上的使用 获取当前浏览器的链接上的参数(不使用vue / react 等框架)仅用在一些脚本上的使用 const query {} const params new URLSear…...
建网站公司是如何赚钱/设计个人网站
针对这个问题我们可以转化一下思路:一个JVM进程,在什么情况下会正常退出? 大部分人应该都知道使用System.exit()或Runtime.exit()可以直接导致当前JVM进程退出,但是仔细想想这个好像跟SpringBoot没啥关系哈 另外一个可能会导致进…...
网站建设的市场需求/win优化大师官网
下载地址:http://code.google.com/p/freecms/ 站点管理 FreeCMS支持网站群模式,并支持无限树级管理。 1. 添加一级站点 从左侧管理菜单点击站点管理进入。 提示:只有admin才可以进行“添加一级站点”操作。 点击“添加一级站点” 输入相关属性点击“保存…...
html学校网站模板/seo优化技术排名
国密算法 国密即国家密码局认定的国产密码算法,即商用密码。 国密算法是国家密码局制定标准的一系列算法。其中包括了对称加密算法,椭圆曲线非对称加密算法,杂凑算法。具体包括SM1,SM2,SM3等,其中: SM2为国家密码管理…...
cco网站素材/免费b站软件推广网站
<bean> ***</bean> 这叫做Spring的依赖注入也叫控制反转。bean的id也就是你说的bean的id,通过id找你想要调用的bean <bean id"demo1Action" class"location1 of demo1"> ***</bean> <bean id"demo2Action"…...
wordpress页面模板目录文件下载/长沙靠谱关键词优化公司电话
yum安装gitlab 时提示 "*.rpm is not signed"或者"*.rpm is not signed" ,只需将 /etc/yum.conf 中 "gpgcheck1" 改为 "gpgcheck0" 即可。...
静态页面网站怎么做/石家庄百度关键词优化
SecureCRT端口转发配置 背景: 现在有一个平台 A 和平台 B 。平台 A 有公网地址,面平台 B 没有公网地址,但是平台 A 和 B 可以通过内网互访( A 和 B 都是双 IP ,一个公网一个内网)。这时候就可以用到端口转发…...