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

redis集群简单介绍及其搭建过程

Redis集群

1、哨兵模式

哨兵可以有多个,从服务器也可以有多个,从服务器也可以有多个,在Redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,如果master节点异常,则会实现主从切换,将某一台的slave作为master,哨兵的配置略微复杂,并且性能和高可用性等各方面表现一般,特别是主从切换的瞬间存在访问瞬断(在这个瞬间无法对外提供服务)的情况

2、高可用集群模式

小集群可以有多个(最多1000个, 1000*10万),Redis集群是一个由多个主从节点群组成的分布式服务器群,它具有复制、高可用、分片特性。Redis集群不需要哨兵也能完成节点移除和故障的转移功能。需要将每个节点设置成集群模式,这种集群模式没有中心节点,可水平扩散。Redis集群的性能和高可用性均优于之前版本的手柄模式,且集群配置十分简单。

客户端如果访问第一个小集群去实现写的功能,然后又访问第二个小集群想要实现读操作,此时Redis集群内部就会从第二个小集群定位到第一个小集群(每个集群是不一样的,因为之前是对第一个小集群进行写操作,所以此时要定位到第一个小集群来实现读操作,否则就会出现数据不一致问题)

Master至少3个(为了选举)

Redis集群搭建

1、首先需要在linux中安装redis

安装完毕后,此时我的redis-server文件在目录/usr/local/bin下

redis-7.2.5在/usr/local/目录下

2、搭建redis:

redis集群至少需要3个master节点,在这里我们搭建3个master,并且给每一个master再搭建一个slave节点,总共是6个节点。步骤如下:

 1)在/usr/local下创建文件夹redis-cluster 然后在其下面分别创建6个文件夹

  mkdir -p /usr/local/redis-clustermkdir 8001 mkdir 8002   mkdir 8003  mkdir 8004  mkdir 8005  mkdir 8006

2)将之前的redis.conf配置文件复制到 8001下 并修改相应的配置

   cp /usr/local/bin/redisconfig/redis.conf  /usr/local/redis-cluster/8001/

   (我之前安装的时候redis.con存放在/usr/local/bin/redisconfig/redis.conf 路径中)

进入到对应的redis.conf文件中修改相应配置 

vi redis.conf

修改配置

 daemonize yes (表示可以后台启动)
port 8001(分别对每个机器的端口号进行设置)
bind 192.168.67.128(必须要绑定当前机器的ip,方便redis集群定位机器,不绑定可能会出现循环查找集群节点机器的情况 我虚拟机的ip是192.i68.68.128 可以通过ifconfig命令查找当前机器的ip)
dir /usr/local/redis-cluster/8001/(指定数据文件的存放位置,必须要指定不同的目录位置,不然会丢失数据)
cluster-enabled yes(启动集群模式)
cluster-config-file nodes-8001.conf(这里800X最好和port对应上)
cluster-node-timeout 5000(超时时间)
appendonly yes(心跳检测,若此时的redis集群出现问题,则其心跳和其他集群的心跳停止,若心跳停止超过5000,则该集群将消失)

3)然后将修改后的redis.conf文件分别复制到各个文件夹下(8002 8003 8004 8005 8006),并将其中的8001改成相应的号

     cp /usr/local/redis-cluster/8001/redis.conf  /usr/local/redis-cluster/8002/cd ..(因为此时在8001文件下)cd 8002vi redis.conf(进入该文件中进行修改):%s/8001/8002/g(批量修改,将8001全部改成8002 
批量修改操作:%s/原字符串/目标字符串/g):wq(保存并退出文本编辑)

8003 8004 8005 8006 同样的方式进行修改

4)分别启动6个redis实例,然后检查是否启动成功

  /usr/local/bin/redis-server /usr/local/redis-cluster/800x/redis.confps -ef | grep redis

5)由于redis集群需要使用ruby命令,所以我们需要安装ruby

   yum install rubyyum install rubygemsgem install redis

6)进入到redis-7.2.5(我安装的redis版本是7.2.5)的src目录下执行命令创建集群

cd /usr/local/redis-7.2.5/src

创建集群

redis-cli --cluster create 192.168.67.128:8001 192.168.67.128:8002 192.168.67.128:8003 192.168.67.128:8004 192.168.67.128:8005 192.168.67.128:8006 --cluster-replicas 1

 1:表示总共的master/总共的slave ==1

7)验证集群

连接任意一个客户端即可 :./redis-cli -c-h -p(-c 表示集群模式)

 例如 /usr/local/bin/redis-cli -c -h 192.168.67.128 -p 800x

进行验证

 cluster info(查看集群信息) cluster nodes(查看节点列表)

 进行数据操作验证 (此时三个master以此使用(redirected))

set name xx  
set name1 yy 
set name2 hh
get name1

关闭集群 

/usr/local/bin/redis-cli -c -h 192.168.67.128 -p 800x shutdown

java中使用redis集群

 1、导入Jedis依赖

2、编写Java代码

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;import java.io.IOException;
import java.util.HashSet;
import java.util.Set;//Redis集群
public class RedisCluster {public static void main(String [] args) throws IOException {//创建6台服务器并将其放到一个hashset中Set<HostAndPort> JedisClusterNode=new HashSet<HostAndPort>();JedisClusterNode.add(new HostAndPort("192.168.67.128",8001));JedisClusterNode.add(new HostAndPort("192.168.67.128",8002));JedisClusterNode.add(new HostAndPort("192.168.67.128",8003));JedisClusterNode.add(new HostAndPort("192.168.67.128",8004));JedisClusterNode.add(new HostAndPort("192.168.67.128",8005));JedisClusterNode.add(new HostAndPort("192.168.67.128",8006));//创建一个JedisPoolConfig连接池JedisPoolConfig config=new JedisPoolConfig();config.setMaxTotal(100);//maxTotal:资源池中最大的连接数config.setMaxIdle(10);//资源池允许最大空闲的连接数config.setTestOnBorrow(true);//向资源池借用连接时,是否做有效性检测//redis集群的访问类JedisClusterJedisCluster jedisCluster=new JedisCluster(JedisClusterNode,1000,10,config);//服务器、等待时间、重传次数、连接池//测试System.out.println(jedisCluster.set("student","Tom"));System.out.println(jedisCluster.set("age","11"));System.out.println(jedisCluster.get("student"));System.out.println(jedisCluster.get("age"));//关闭jedisCluster.close();}
}

此时redis集群中就已经有了这些数据可以进行查看,在linux中输入 get “student”查看结果

相关文章:

redis集群简单介绍及其搭建过程

Redis集群 1、哨兵模式 哨兵可以有多个&#xff0c;从服务器也可以有多个&#xff0c;从服务器也可以有多个&#xff0c;在Redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态&#xff0c;如果master节点异常&#xff0c;则会实现主从切换&#x…...

linux桌面运维----第五天

1、创建用户命令useradd&#xff1a; 作用&#xff1a;创建用户 ​语法&#xff1a;useradd [选项名] 用户名 ​选项&#xff1a; -d<登入目录> 指定用户登入时的起始目录。 【掌握】 -g<群组> 指定用户所属的群组&#xff08;基本组&#xff09;。【掌握】…...

【SQL Server数据库】简单查询

目录 用SQL语句完成下列查询。使用数据库为SCHOOL数据库 1. 查询学生的姓名、性别、班级名称&#xff0c;并把结果存储在一张新表中。 2. 查询男生的资料。 3. 查询所有计算机系的班级信息。 4&#xff0e;查询艾老师所教的课程号。 5. 查询年龄小于30岁的女同学的学号和姓名。…...

Docker 从入门到精通(大全)

一、概述 1.1 基本概念 Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。…...

基于JSP的在线教育资源管理系统

开头语&#xff1a; 你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果你对在线教育资源管理系统感兴趣或者有相关需求&#xff0c;欢迎在文末找到我的联系方式。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术 工具&#xff1a;IDE、N…...

在java中代理http请求,如何避免陷入循环?

在 Java 中&#xff0c;代理 HTTP 请求时&#xff0c;如果不小心配置不当&#xff0c;可能会导致循环请求。循环请求通常发生在代理服务器将请求再次发送回自己&#xff0c;形成一个死循环。为了避免这种情况&#xff0c;可以采取以下几种方法&#xff1a; 将域名设置为指定的…...

国内镜像源网址

腾讯&#xff1a;腾讯软件源 (tencent.com) 阿里&#xff1a;阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 (aliyun.com) 清华&#xff1a;清华大学开源软件镜像站 | Tsinghua Open Source Mirror...

合适的智能猫砂盆到底怎么挑?开放式封闭式一次说清!

想当初我也是在网上看了各种测评&#xff0c;纠结了好久才下定决心入手了智能猫砂盆。封闭式和开放式都用过&#xff0c;各有各的利与弊&#xff0c;不过最后的我还是选择了开放式的智能猫砂盆&#xff0c;因为开放式的设计结构会更加方便我观察小猫&#xff0c;哪个铲屎官不喜…...

阿里云开启ssl证书过程记录 NGINX

&#x1f91e;作者简介&#xff1a;大家好&#xff0c;我是思无邪&#xff0c;2024 毕业生&#xff0c;某厂 Go 开发工程师.。 &#x1f402;我的网站&#xff1a;https://www.yishanicode.top/ &#xff0c;持续更新&#xff0c;希望对你有帮助。 &#x1f41e;如果文章或网站…...

C语言程序设计 9.37 调用随机函数为5x4的矩阵置 100以内的整数,输出该矩阵,求出每行元素之和,并把和的最大的那一行与第一行的元素对调

void count_sum(int sum[]) {int i;printf("每行相加的情况如下\n");for (i 0;i < 5; i){printf("%d ", sum[i]);}printf("\n"); } void test(int arr[5][4]) {int i, j;srand((unsigned)time(NULL));//添加这个可以每次不同的随机数&#x…...

Webpack: 借助 Babel+TS+ESLint 构建现代 JS 工程环境

概述 Webpack 场景下处理 JavaScript 的三种常用工具&#xff1a;Babel、TypeScript、ESLint 的历史背景、功能以及接入 Webpack 的步骤借助这些工具&#xff0c;我们能构建出更健壮、优雅的 JavaScript 应用 使用 Babel ECMAScript 6.0(简称 ES6) 版本补充了大量提升 JavaSc…...

孩子不想上学,父母应如何教育?“强迫教育”会激起孩子反抗心理

上周末朋友聚会&#xff0c;都是家有上学娃的年纪&#xff0c;闲聊中&#xff0c;话题自然少不了孩子的上学问题。其中&#xff0c;不少朋友都有抱怨过同一个问题&#xff1a;孩子不想上学&#xff0c;即使人到了学校&#xff0c;心也不在学校。   事实上&#xff0c;孩子出现…...

Python深度学习技术

原文链接&#xff1a;Python深度学习技术 近年来&#xff0c;伴随着以卷积神经网络&#xff08;CNN&#xff09;为代表的深度学习的快速发展&#xff0c;人工智能迈入了第三次发展浪潮&#xff0c;AI技术在各个领域中的应用越来越广泛。Transformer模型&#xff08;BERT、GPT-…...

ECharts 雷达图案例002 - 诈骗性质分析

ECharts 雷达图案例002 - 诈骗性质分析 &#x1f4ca; ECharts 雷达图案例002 - 诈骗性质分析 深入挖掘数据背后的故事&#xff0c;用可视化手段揭示诈骗行为的模式和趋势。 &#x1f50d; 案例亮点 创新的数据展示方式&#xff0c;让复杂的诈骗数据一目了然。定制化的雷达图…...

想远程控制手机,用哪个软件好?

很多人都想知道安卓系统或iOS系统要如何实现手机远程控制手机、电脑远程控制手机&#xff0c;分别需要用到什么软件&#xff0c;这篇文章一次说清楚。 注意&#xff0c;安卓系统需要是7.0及以上版本&#xff0c;iOS系统需要是11及以上版本。具体使用步骤请点击关注&#xff0c;…...

数字内容“遍地开花”,AI技术如何创新“造梦”?

文 | 智能相对论 作者 | 陈泊丞 这是春晚舞台西安分会场《山河诗长安》的一幕&#xff1a;“李白”现世&#xff0c;带领观众齐颂《将进酒》&#xff0c;将中国人骨子里的豪情与浪漫演绎得淋漓尽致。 这又是浙江义乌商品市场里的另一幕&#xff1a;只会说几个英文单词的女老板…...

MySQL集群如何实现读写分离

数据源配置&#xff1a;定义了主从数据库的连接池。读写分离规则&#xff1a;通过MasterSlaveRuleConfiguration定义了主从数据库的读写分离规则。负载均衡算法&#xff1a;定义了从数据库的负载均衡算法。创建ShardingDataSource&#xff1a;使用数据源和读写分离规则创建了Sh…...

一分钟剪辑1000条视频的云微客矩阵,怎么做到的?

当我们打开短视频软件时&#xff0c;就会有大量风格迥异的短视频犹如潮水般涌现在我们面前&#xff0c;这些短视频不仅配置了加粗的标题&#xff0c;下方还配置了字幕&#xff0c;中间则播放着视频&#xff0c;就是这样简易的视频&#xff0c;往往总能获得较高的播放量&#xf…...

简单案例比较Lambda和方法引用的差别

1.打印列表元素 正常使用 List<String> list Arrays.asList("a", "b", "c");for (String str: list){System.out.println(str);}Lambda表达式 list.forEach(e -> System.out.println(e));方法引用 list.forEach(System.out::println…...

10 个最佳 AI 代码生成器

人工智能的兴起极大地影响了编码和开发领域。 人工智能驱动的代码生成器有助于简化编码流程、自动化日常任务&#xff0c;甚至预测和建议代码片段。 下面&#xff0c;我们介绍一些最好的人工智能代码生成器、它们的独特功能&#xff0c;以及它们如何彻底改变您的编程体验。 1.…...

Pixel Couplet Gen 生成效果对比分析:不同参数下的对联质量评估

Pixel Couplet Gen 生成效果对比分析&#xff1a;不同参数下的对联质量评估 1. 引言&#xff1a;当AI遇上传统对联 春节贴对联是中国延续千年的文化传统&#xff0c;但创作一副既工整又有新意的对联并非易事。Pixel Couplet Gen作为一款AI对联生成工具&#xff0c;通过调整Te…...

终极指南:如何构建现代化微服务架构 - Zend Framework Expressive完整教程

终极指南&#xff1a;如何构建现代化微服务架构 - Zend Framework Expressive完整教程 【免费下载链接】zendframework Official Zend Framework repository 项目地址: https://gitcode.com/gh_mirrors/ze/zendframework 在当今快速发展的微服务架构时代&#xff0c;PHP…...

嵌入式AI新篇章:Qwen3-ASR-0.6B在边缘计算设备上的部署与优化

嵌入式AI新篇章&#xff1a;Qwen3-ASR-0.6B在边缘计算设备上的部署与优化 1. 引言&#xff1a;当语音识别遇见边缘计算 想象一下&#xff0c;你对着一个巴掌大的智能音箱说话&#xff0c;它几乎在你话音落下的瞬间就理解了你的意思&#xff0c;并且完全不需要连接云端。或者&…...

数据中台是什么?怎么搭建数据中台?

去年&#xff0c;一家零售企业的CEO找到我&#xff0c;说了一句让我印象很深的话&#xff1a; "我们公司有数据&#xff0c;但没有数据能力。"很多企业建数据中台&#xff0c;是为了管好数据。 但这个出发点&#xff0c;从一开始就错了。 数据中台的核心不是管理&…...

STM32F103红外小车避坑指南:从Proteus仿真失败到实物调试成功

STM32F103红外小车避坑指南&#xff1a;从Proteus仿真失败到实物调试成功 第一次尝试用STM32F103做红外循迹小车时&#xff0c;我花了整整三天时间在Proteus里调试仿真&#xff0c;结果连最基本的电机转动都实现不了。直到把电路搬到实物上&#xff0c;才发现仿真环境里那些看似…...

让你的调试日志五彩斑斓:J-Link RTT高级封装技巧(支持中文、浮点数、十六进制)

让你的调试日志五彩斑斓&#xff1a;J-Link RTT高级封装技巧&#xff08;支持中文、浮点数、十六进制&#xff09; 调试是嵌入式开发中不可或缺的一环&#xff0c;而高效的调试工具能显著提升开发效率。J-Link RTT&#xff08;Real Time Transfer&#xff09;作为一种无需额外硬…...

白鲸开源架构师获邀成为 ASF Member

在技术领域&#xff0c;我们常常被那些闪耀的、可见的成果所吸引。今天&#xff0c;这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力&#xff0c;让我们得以一窥未来的轮廓。然而&#xff0c;作为在企业一线构建、部署和维护复杂系统的实践者&#xff0c;我们深知…...

操作系统-lazy allocation

只有真正需要使用这些页的时候&#xff0c;才进行物理内存页的实际分配sbrk()在xv6操作系统中,进程的用户内存布局由代码段(text)、数据段(data)、堆区(heap)和栈区(stack)组成。sbrk()主要修改的是堆区的大小,堆在xv6中由低地址向高地址拓展。当程序调用sbrk(n)时,操作系统内核…...

s2-pro实战落地:跨境电商产品介绍多语种语音批量生成

s2-pro实战落地&#xff1a;跨境电商产品介绍多语种语音批量生成 1. 场景痛点与解决方案 跨境电商企业面临一个共同挑战&#xff1a;如何高效地为全球不同语言市场的产品生成专业语音介绍。传统方案需要雇佣多语种配音人员&#xff0c;成本高、周期长&#xff0c;且难以保证语…...

Qwen2.5-14B-Instruct多轮记忆|像素剧本圣殿长剧本连贯性保障机制

Qwen2.5-14B-Instruct多轮记忆&#xff5c;像素剧本圣殿长剧本连贯性保障机制 1. 专业剧本创作的新范式 在创意写作领域&#xff0c;剧本创作一直面临着角色一致性、情节连贯性和风格统一性的挑战。传统创作工具往往只能提供片段式的辅助&#xff0c;而"像素剧本圣殿&qu…...