【Redis】浅谈Redis-集群(Cluster)

news2024/11/15 21:04:37

文章目录

  • 前言
  • 1、集群实现
    • 1.1 创建cluster目录,并将redis.conf复制到该文件夹
    • 1.2 复制redis.conf,并进行配置
    • 1.3 启动redis,查看启动状态
    • 1.4 合成集群
    • 1.5 查看集群
    • 1.6 集群读写操作
  • 2、SpringBoot整合redis集群
    • 2.1 引入包
    • 2.2 设置配置
    • 2.3 使用RedisTemplate工具
  • 总结

前言

下面我们来看看redis的集群实现。
redis集群,即对redis的一种水平扩容,主要解决并发写量太大有性能瓶颈,单台redis容量限制的问题。
在这里插入图片描述

n>3:一个集群至少有3个master,新master的选举需要大于半数的集群master节点同意才能选举成功,如果只有两个master节点,其中一个宕机了,达不到选举新master的条件。

1、集群实现

我们以三主三从来实现redis集群,对redis.conf进行配置,端口选择:6379,6380,6381,6389,6390,6391。

1.1 创建cluster目录,并将redis.conf复制到该文件夹

 mkdir cluster
cp /usr/local/redis/redis-6.2.1/redis.conf /opt/cluster/

1.2 复制redis.conf,并进行配置

cp /opt/cluster/redis.conf /opt/cluster/redis-6379.conf
vim redis-6379.conf


daemonize yes
bind 192.168.23.102
dir /opt/cluster/
port 6379
dbfilename dump_6379.rdb
pidfile /var/run/redis_6379.pid
logfile "./log-6379.log"


# 开启集群设置
cluster-enabled yes
# 设置节点配置文件
cluster-config-file node-6379.conf
# 设置节点失联时间,超过该时间(毫秒),集群自动进行主从切换
cluster-node-timeout 15000

其他节点的redis.conf一次进行配置,只需要将其中的端口号改成相应端口就可以了。

1.3 启动redis,查看启动状态

redis-server /opt/cluster/redis-6379.conf

其他端口的redis按照上述命令启动就OK。
在这里插入图片描述

出现如图,则证明正常启动。

1.4 合成集群

进入redis的src目录执行redis-cli --cluster create --cluster-replicas 1 ip:端口,合成集群

redis-cli --cluster create --cluster-replicas 1 192.168.23.102:6379 192.168.23.102:6380 192.168.23.102:6381 192.168.23.102:6389 192.168.23.102:6390 192.168.23.102:6391

在这里插入图片描述

回车后执行,在执行过程中会让我们确定是否同意这样的分配,输入:yes即可。等待程序执行完成,集群也就创建成功。

1.5 查看集群

进入redis中,使用cluster nodes来查看集群信息。

redis-cli -h 192.168.23.102 -p 6379 


cluster nodes

在这里插入图片描述
如图:我们可以看到各个redis节点的角色,同时在slave节点上附带了对应master的id,例如:slave6390上附带的master节点的id:159b9f1162492aef8cfb3b81c72dd7d2c87ba339,而这个id对应的master就是6380。

1.6 集群读写操作

我们使用redis-cli -h 192.168.23.102 -p 6379 进入的redis中,使用set name jiashn来写入数据。

我们发现,写入数据是redis报错了,告诉我们moved到6380。
这是因为在cluster中存在槽(slots)概念。redis集群将内部划分成16384个slots(插槽),合并成集合的时候,会将每个slots映射到一个master上。例如:上面的三个master,映射范围如下:

Redis主节点插槽(slots)范围
master1(6379)[0-5460] 0是开始位置,表示第一个插槽
master2(6380)[5460-10922]
master3(6381)[10922-16383]
slave1,slave2,slave3从节点没有插槽,slave是用来对master做替补

而每个写入数据的key通过CRC16(key)%16384运算后得到slots的位置,然后根据slots与master的映射关系找到对应的redis节点,然后将数据写入的对应的master中。
如果需要在集群中读写数据,不出现上面的报错问题,那么在进入对应端口redis时在redis-cli后加上-c,即redis-cli -c -h 192.168.23.102 -p 6379
在这里插入图片描述

从图中我们可以看到,读写入数据成功了,也提示我们slot的值,以及对应master。

注1:在同一个slot下,不能使用多键值操作,例如:mset key1 value1 key2 value2

可以通过{}来定义组的概念,从而使key中{}内相同的键值放在同一个slot中。例如:mset key1{g1} jiashn key2{g1} queena

注2:如果一段插槽的master都宕机了,redis服务会继续吗?
这取决于cluster-requure-full-coverage参数值:
yes:默认,整个集群都无法提供服务
no:宕机部分的插槽不能使用,其他槽位正常使用

2、SpringBoot整合redis集群

2.1 引入包

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2.2 设置配置

# 集群节点(host:port),多个之间用逗号隔开
spring.redis.cluster.nodes=192.168.23.102:6379,192.168.23.102:6380,192.168.23.102:6381,192.168.23.102:6389,192.168.23.102:6390,192.168.23.102:6391
# 连接超时时间(毫秒)
spring.redis.timeout=60000

2.3 使用RedisTemplate工具

@Autowired
private RedisTemplate<String, String> redisTemplate;

// 用下面5个对象来操作对应的类型
this.redisTemplate.opsForValue(); //提供了操作string类型的所有方法
this.redisTemplate.opsForList(); // 提供了操作list类型的所有方法
this.redisTemplate.opsForSet(); //提供了操作set的所有方法
this.redisTemplate.opsForHash(); //提供了操作hash表的所有方法
this.redisTemplate.opsForZSet(); //提供了操作zset的所有方法

总结

上述就是Redis的集群实现,可能存在不详细的地方,请大家多多指出。同时也希望对大家理解redis有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/593434.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++服务器框架开发5——日志系统logAppender/IO类“3种stream”/双感叹号

该专栏记录了在学习一个开发项目的过程中遇到的疑惑和问题。 其教学视频见&#xff1a;[C高级教程]从零开始开发服务器框架(sylar) 上一篇&#xff1a;C服务器框架开发4——日志系统logger/.cpp与.cc C服务器框架开发5——日志系统logAppender/IO类“3种stream”/双感叹号 目前…

2022年天府杯全国大学生数学建模竞赛C题环境保护与绿色经济解题全过程文档及程序

2022年天府杯全国大学生数学建模竞赛 C题 环境保护与绿色经济 原题再现&#xff1a; “节能减排”和发展绿色经济是国家一项重大战略规划。“绿水青山就是金山银山”。环境的保护对国民经济的发展有着重要意义。随着工业化进程的加快&#xff0c;环境保护方面的问题已经刻不容…

ClickHouse进阶|如何自研一款企业级高性能网关组件?

使用原生ClickHouse集群进行节点数据查询和写入时&#xff0c;离不开第三方开源网关组件chproxy支持。但由于chproxy缺少TCP协议支持&#xff0c;导致性能、查询能力等受限。这也成为困扰众多ClickHouse开发者的一大难题。那么&#xff0c;究竟应该如何突破&#xff1f;本文将揭…

chatgpt赋能python:Python中撤销的快捷键

Python中撤销的快捷键 在编程中&#xff0c;我们经常需要进行调试&#xff0c;不可避免地会出现一些错误&#xff0c;这时候撤销 (Undo) 功能就显得尤为重要。在 Python 中&#xff0c;我们可以使用一些快捷键来快速撤销&#xff0c;本文将会介绍这些快捷键的使用以及使用它们…

chatgpt赋能python:Python中的字符提取:从基础到高级

Python中的字符提取&#xff1a;从基础到高级 在使用Python进行文本处理和数据挖掘时&#xff0c;我们经常需要从字符串中提取特定的字符或子串。本文将介绍Python中的常用字符串提取方法&#xff0c;包括基础的字符串操作、正则表达式和第三方库等高级方法。 基础字符串操作…

二叉树中堆的实现

完全二叉树 满二叉树&#xff1a;二叉树每个节点的度都达到最大值&#xff08;2&#xff09;&#xff0c;由此可有等比求和计算出节点总数&#xff1a;2^k-1 完全二叉树&#xff1a;除了最后一层。前面节点的度都满了&#xff0c;最后一层可以不满&#xff0c;但是必须从左至右…

用时序数据库 DolphinDB 实现地震波形的分析预警

1. 绪论 波形数据的存储与实时流处理是地震预警、地震速报、地震烈度速报、震源机制解等数字地震台网综合处理系统的前提&#xff0c;合理的存储方案与高效的实时流处理架构能极大地节约存储成本、降低响应延时、方便震源分析。 本篇教程会为有该方面需求的客户提供一个基于 …

如何在不丢失格式的情况下将 Excel 转换为 PDF?

Microsoft Excel 因其专业的数据或信息显示能力而被广泛采用。但是&#xff0c;它在兼容性上有一个恼人的缺点。 首先&#xff0c;Excel只能在Windows和MacOS上使用&#xff0c;Linux或其他操作系统的用户将无法使用&#xff1b;其次&#xff0c;即使您有一个可以打开和阅读 E…

PERMA幸福模型

PERMA幸福模型 由“积极心理学之父”马丁塞利格曼&#xff08;Martin Seligman&#xff09;在《持续的幸福 》一书中提出。 模型介绍 PERMA指的是创造充实、快乐和有意义的生活所必需的五大要素&#xff0c;它们是: 正向情绪Positive emotions 积极情绪是快乐人生的一个重要…

三种不同的存储芯片性能比较

为了进行性能比较&#xff0c;使用了三种不同的存储芯片&#xff0c;即Everspin EM064LX 64Mib STT‐MRAM、Micron MT25Q 128Mib NOR闪存和Micron MT29F 1Gib SLC NAND闪存。 该基准测试在STM32H755ZI上运行&#xff0c;Cortex‐M7内核的时钟频率为240MHz。Quad SPI总线用于1‐…

安泰功率放大器ATA-8202在EMC电磁兼容测试中的具体应用

作为电子及电器产品质量衡量指标之一的电磁兼容性&#xff08;EMC&#xff09;测试&#xff0c;它的测试正确与否直接关系到产品自身使用的可靠性及安全性&#xff0c;并且它还有可能对于同系统中的其他部分造成影响&#xff0c;不良的电磁兼容性会直接导致系统无法正常运转&am…

GIS数据转换器坐标生成功能

​很多时候我们会拿到一些没有坐标的图片或栅格数据&#xff0c;我们如何给它赋予坐标呢&#xff1f;下面介绍一种为这些数据生成坐标的方法。使用工具是GIS数据转换器-栅格-V4.0。 GIS数据转换器坐标生成功能 使用图片是这样的&#xff0c;网上找的不知道哪位大神画的三国时期…

【毕业季征文】追光人,终将光芒万丈!

追光人&#xff0c;终将光芒万丈&#xff01; 写在最前面最后从0到1 我的二进制探索之路一、从0到1&#xff0c;破茧成蝶二、从0到2n&#xff0c;全面发展三、从0到∞&#xff0c;逐光而行 参考 写在最前面 参与活动#毕业季征文|未来可期# 岁月不居&#xff0c;时节如流。转眼…

朋友轻松拿下字节27K的offer,羡慕了....

最近有朋友去字节面试&#xff0c;面试前后进行了20天左右&#xff0c;包含4轮电话面试、1轮笔试、1轮主管视频面试、1轮hr视频面试。 据他所说&#xff0c;80%的人都会栽在第一轮面试&#xff0c;要不是他面试前做足准备&#xff0c;估计都坚持不完后面几轮面试。 其实&…

C++ 范围for循环

1. 在C98中&#xff0c;不同的容器和数组&#xff0c;遍历的方法不尽相同&#xff0c;写法不统一&#xff0c;也不够简洁&#xff0c;而C11基于范围的 for循环以统一、简洁的方式来遍历容器和数组&#xff0c;用起来更方便了。 C 容器都有哪些 简单介绍&#xff1a; //STL C标…

7分钟的面试,我太难了.....

干了两年外包&#xff0c;本来想出来正儿八经找个互联网公司上班&#xff0c;没想到算法死在另一家厂子。 自从加入这家外包公司&#xff0c;每天都在加班&#xff0c;钱倒是给的不少&#xff0c;所以也就忍了。没想到11月一纸通知&#xff0c;所有人不许加班&#xff0c;薪资…

leetcode-最大二叉树(java)

leetcode654题--最大二叉树 leetcode654 - 最大二叉树解题思路代码演示二叉树专题 leetcode654 - 最大二叉树 leetcode654 - 最大二叉树 原题链接 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点&#xff0c;其值为 nums 中…

幻读与不可重复读的区分

幻读 VS 不可重复读 幻读重点在于数据是否存在。原本不存在的数据却真实的存在了&#xff0c;这便是幻读。 在同一个事务中&#xff0c;第一次读取到结果集和第二次读取到的结果集不同。引起幻读的原因在于另一个事务进行了INSERT操作。 不可重复读重点在于数…

中国人民大学与加拿大女王大学金融硕士——跟5月说再见,期待新的精彩

岁月清浅&#xff0c;时光无言。5月的风即将吹来6月的的绚烂&#xff0c;在这个美好的季节&#xff0c;你有新的期盼了吗&#xff1f;在职的你&#xff0c;是否需要再学习呢&#xff0c;中国人民大学与加拿大女王大学金融硕士项目为你提供在职读研的平台&#xff0c;在这里开启…

CMU 15-445 Project #0 - C++ Primer

Project #0 - C Primer 一、题目链接二、准备工作1.项目构建2.代码测试3.代码格式化4.压缩与提交 三、部分实现 一、题目链接 二、准备工作 以下操作在题目文档中均有提及&#xff0c;这里进行简要整理。 1.项目构建 首先需要从远程仓库克隆项目文件&#xff0c;由于该仓库会…