Redis————主从架构

news2024/12/26 12:51:40

主从架构搭建

单机多实例

  1. 粗制一份redis.conf文件

  2. 将相关配置修改为如下值:

    port 与主节点端口后不相同即可
    pidfile pid进程号保存文件pidfile的路径
    logfile 日志文件名称
    dir 指定数据存放目录
    #需要注释掉bind
    #bind 127.0.0.1(bind绑定的是自己机器网卡的ip,如果有多块网卡可以配置多个ip,代表客户端通过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可)

  3. 配置主从复制

    replicaof ip port # 从主机port端口的redis实力复制数据,Redis5.0之前时候slaveof
    replica-read-only yes # 配置从节点为只读
    
  4. 启动从节点
    redis-server 从节点配置文件

  5. 连接从节点
    redis-cli -p 从节点端口号

  6. 测试在主节点写数据,从节点是否能及时同步新修改的数据

多机多实例

只需要将修改该服务器上redis配置文件

replicaof ip port # 从主机port端口的redis实力复制数据,Redis5.0之前时候slaveof
replica-read-only yes # 配置从节点为只读

Redis主从工作原理

数据全量复制

如果你为master配置了一个slave,不管这个slave是否是第一次连接上Master,它都会发送一个PSYNC
命令给master请求复制数据。
master收到PSYNC命令后,会在后台进行数据持久化通过bgsave生成最新的rdb快照文件,持久化期
间,master会继续接收客户端的请求,它会把这些可能修改数据集的请求缓存在内存中。当持久化进行完
毕以后,master会把这份rdb文件数据集发送给slave,slave会把接收到的数据进行持久化生成rdb,然后
再加载到内存中。然后,master再将之前缓存在内存中的命令发送给slave。
当master与slave之间的连接由于某些原因而断开时,slave能够自动重连Master,如果master收到了多
个slave并发连接请求,它只会进行一次持久化,而不是一个连接一次,然后再把这一份持久化的数据发送
给多个并发连接的slave。

主从复制(全量复制)流程图

在这里插入图片描述

数据部分复制

当master和slave断开重连后,一般都会对整份数据进行复制。但从redis2.8版本开始,redis改用可以支
持部分数据复制的命令PSYNC去master同步数据,slave与master能够在网络连接断开重连后只进行部分
数据复制(断点续传)。
master会在其内存中创建一个复制数据用的缓存队列,缓存最近一段时间的数据,master和它所有的
slave都维护了复制的数据下标offset和master的进程id,因此,当网络连接断开后,slave会请求master
继续进行未完成的复制,从所记录的数据下标开始。如果master进程id变化了,或者从节点数据下标
offset太旧,已经不在master的缓存队列里了,那么将会进行一次全量数据的复制。

主从复制(部分复制,断点续传)流程图

在这里插入图片描述

Redis哨兵高可用架构

架构图

在这里插入图片描述

redis哨兵架构搭建步骤

单机多实例

  1. 复制一份sentinel.conf文件
  2. 将相关配置修改为如下值:
    port 与原sentinel区分开即可
    daemonize yes
    pidfile 进程号保存文件
    logfile 日志文件
    dir 数据保存目录
    #sentinel monitor <master‐redis‐name> <master‐redis‐ip> <master‐redis‐port>
    #quorum是一个数字,指明当有多少个sentinel认为一个master失效时(值一般为:sentinel总数/2 +
    1),master才算真正失效
    sentinel monitor mymaster 192.168.0.60 6379 2 # mymaster客户端访问时会用
  3. 启动sentinel哨兵实例
    redis-sentinel 对应的配置文件

多机多实例

上述配置中只需要修改
sentinel monitor <master‐redis‐name> <master‐redis‐ip> <master‐redis‐port>
即可

哨兵的Spring Boot整合Redis连接代码见示例

  1. 引入相关依赖

    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring‐boot‐starter‐data‐redis</artifactId>
    </dependency>
    <dependency>
    	<groupId>org.apache.commons</groupId>
    	<artifactId>commons‐pool2</artifactId>
    </dependency>
    
  2. springboot项目核心配置

    server:
    	port: 8080
    spring:
    	redis:
    		database: 0
    		timeout: 3000
    		sentinel:
    			master: master
    			nodes: 192.168.0.60:26379,192.168.0.60:26380,192.168.0.60:26381
    		lettuce:
    			pool:
    				max-idle: 50
    				min-idle: 10
    				max-active: 100
    				max-wait: 1000
    
  3. 访问代码

    @RestController
    public class RedisTestController {
    	@Autowired
    	private StringRedisTemplate stringRedisTemplate;
    
    	@RequestMapping("/test")
    	public void testSentinel() throws InterruptedException {
    		int i = 1;
    		while (true){
    			try {
    				stringRedisTemplate.opsForValue().set("lzh"+i, i+"");
    				System.out.println("设置key:"+ "lzh" + i);
    				i++;
    				Thread.sleep(1000);
    			}catch (Exception e){
    				logger.error("错误:", e);
    			}
    		}
    	}
    }
    
    

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

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

相关文章

Spring Boot 中的 RabbitMQ 的消息接收配置是什么,原理,如何使用

Spring Boot 中的 RabbitMQ 的消息接收配置是什么&#xff0c;原理&#xff0c;如何使用 RabbitMQ 是一个流行的消息队列系统&#xff0c;它可以用于在应用程序之间传递消息。Spring Boot 提供了对 RabbitMQ 的支持&#xff0c;我们可以使用 Spring Boot 中的 RabbitMQ 消息接…

从0到1精通自动化测试,pytest自动化测试框架,allure标记用例级别severity(二十一)

目录 一、前言 二、用例等级 三、pytest用例 四、统计缺陷 五、allure命令行参数allure-severities 一、前言 我们在做功能测试的时候&#xff0c;执行完一轮测试用例&#xff0c;输出测试报告的时候&#xff0c;会有统计缺陷的数量和等级 在做自动化测试的过程中&#…

SpringBoot3【② Web开发】

SpringBoot3-Web开发 SpringBoot的Web开发能力&#xff0c;由SpringMVC提供。 0. WebMvcAutoConfiguration原理 1. 生效条件 AutoConfiguration(after { DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class,ValidationAutoConfiguration.clas…

12-C++算法笔记-递推

&#x1f4d6; 引入 让我们从一个有趣的例子开始&#xff0c;棋盘放米的问题。假设有一个 8 8 8\times8 88 的棋盘&#xff0c;皇帝想要奖赏一位大臣。大臣提出的要求是在棋盘上按如下规则领赏&#xff1a;第一个格子上放一粒米&#xff0c;随后的每个格子都放置前一个格子上…

IM即时通讯APP在聊天场景中的应用

即时通讯&#xff08;IM&#xff09;应用可以满足人们随时随地进行文字、语音、图片、视频等多媒体信息的传递需求&#xff0c;为个人和企业提供了高效、便捷的沟通方式。在企业中&#xff0c;IM即时通讯APP更是发挥着重要的作用&#xff0c;促进了协作和团队工作的效率提升。以…

jenkins邮箱设置报:501 mail from address must be same as authorization user

jenkins配置邮箱时遇到如下错误&#xff1a;501 mail from address must be same as authorization user 原因是管理员邮箱地址与发送邮箱地址不统一&#xff0c;配置管理员邮件地址&#xff1a;系统管理-系统配置-Jenkins Location&#xff0c;输入与发件人统一的地址即可

Airtest:Windows桌面应用自动化测试三【Airtest脚本的点击位置与点击偏移】

Airtest脚本的点击位置与点击偏移 1. 前言2. Airtest的点击位置3.Airtest的点击偏移图像点击偏移&#xff0c;常用于下述场景中&#xff1a;3.1、一个是&#xff0c;当我们的页面中&#xff0c;存在很多个相同的图标&#xff0c;我们想指定点击某个位置的图标&#xff0c;就有可…

台灯的功能作用有哪些?分享好用的台灯

照明对于我们来说是非常重要的&#xff0c;从远古时期的钻木取火到古代的蜡烛、油灯以及近代电灯&#xff0c;可以说人们在不断的创造着能够发亮的东西&#xff0c;而现在电灯的种类很多&#xff0c;包括壁灯、吊灯、台灯等&#xff0c;因为实际用到的环境不同起到的作用也不尽…

抖音矩阵号/抖音短视频SEO矩阵系统源码开发及开发者思路分享....

抖音矩阵号短视频系统&#xff0c;抖音矩阵号系统源码开发,思路分享&#xff0c;说一点开发者掏心窝子的话...... 一套优秀的短视频获客系统&#xff0c;支持短视频智能剪辑、短视频定时发布&#xff0c;短视频排名查询及优化&#xff0c;短视频智能客服等&#xff0c;那么短视…

C语言进阶---动态内存管理

1、为什么存在动态内存分配&#xff1f; 我们已经掌握的内存开辟方式有&#xff1a; int a 20; //在栈空间上开辟四个字节。 char arr[20]; //在栈空间上开辟10个字节的连续空间。但是上述的开辟空间的方式有两个特点&#xff1a; 开辟空间大小是固定的数组在申…

基于JSP+Servlet+Mysql客户管理系统

基于JSPServletMysql客户管理系统 一、系统介绍二、功能展示1.项目骨架2.登录界面3.个人信息修改4.数据分析5.市场管理6.线索管理7、联系人8、客户管理9、交易管理 四、其它1.其他系统实现五.获取源码 一、系统介绍 项目类型&#xff1a;Java web项目 项目名称&#xff1a;基…

【弱网】clumsy的filter语法设置

clumsy 官方说明 jagt WinDivert 的语法 https://github.com/basil00/Divert/wiki/WinDivert-Documentation#7-filter-languageDivert大神们的改版 clumsy-regoutbound 发送 inbound

CVPR2023 Openlanev2 挑战赛:第一名方案解读

引言: 如第一篇挑战赛的博客(# CVPR2023挑战赛之-开放车道拓扑信息(OpenLane Topology)的测试【1】)所说,这项任务,实际上是一个复合任务,其评价指标也是语义分割、目标检测加拓扑位置关系三个指标的精准性平均值。本博客就第一名公布的Arxiv方法进行了解读,并对topol…

iview input组件clearable清空属性无法清空双向绑定值的原因解决

最近在使用iview新版本 input组件时&#xff0c;刚开始发现使用v-modal绑定的值&#xff0c;在点击clearable清除input框内容时&#xff0c;再次搜索发现参数还是没有被清掉 于是仔细查看代码的细节&#xff0c;才发现问题所在&#xff1a; 原来我绑定的参数的中文名称&#x…

【C1】数据类型,运算符/循环,数组/指针,结构体,main参数,static/extern,编译预处理,gdb,makefile

文章目录 1.数据类型&#xff1a;编译器&#xff08;compiler&#xff09;与解释器&#xff08;interpreter&#xff09;&#xff0c;中文里的汉字和标点符号是两个字节&#xff0c;不能算一个字符&#xff08;单引号&#xff09;2.运算符/循环&#xff1a;sizeof/size_t3.数组…

SQL中的——左连接(Left join)、右连接(Right join)、内连接(Inner join)

前言 最近有一个开发需求&#xff0c;需要实现一个复杂年度报表&#xff0c;前后端都是博主开发&#xff0c;这里的业务逻辑比较复杂&#xff0c;也很锻炼sql能力&#xff0c;这里博主也将表的内外连接做了一个整理分享给大家 一、概念 首先还是介绍一下这三个的定义 1.Lef…

C#难点语法讲解之abstract---从应用需求开始讲解

一、背景故事 我们正常写的脚本&#xff0c;一般都是非常完整的&#xff0c;脚本完整意味着需求完整。 例如&#xff0c;我是售货员&#xff0c;现在苹果5元&#xff0c;梨子3元&#xff0c;西瓜20元&#xff0c; 一个人&#xff0c;来买了5个苹果&#xff0c;4个梨子&#xf…

springcloud二回头

Spring Cloud 一种微服务&#xff0c;以往的单体项目在一定程度的累积后&#xff0c;一些服务需要进行拆分&#xff0c;独立进行开发&#xff0c;然后再合起来&#xff0c;之前的是装成一个包进行部署 不同的搭配&#xff1a; spring cloud和boot的对应版本&#xff1a; Rest…

JavaScript 内置对象 数据类型

目录 JavaScript 内置对象 1.内置对象 2.查文档 2.1MDN 2.2 如何学习对象中的方法 3.Math对象 3.1Math 概述 3.2随机数方法 random() 4. 日期对象 4.1Date 概述 4.2Date() 方法的使用 4.3 日期格式化 4.4获取毫秒的总的毫秒形式 5.数组对象 5.1数组对象的创建 5…

1. Netty核心功能与线程模型详解

Netty 1. 认识Netty2. 第一个Netty程序 本文是按照自己的理解进行笔记总结&#xff0c;如有不正确的地方&#xff0c;还望大佬多多指点纠正&#xff0c;勿喷。 课程内容&#xff1a; 01、Netty核心组件快速了解 02、Hello,Netty! 03、深入理解Channel、EventLoop(Group) 04、深…