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

Redis主从复制和哨兵架构图,集成Spring Boot项目实战分享

目录

  • 1. Redis 主从复制
  • 2. Redis 哨兵架构
  • 3. 集成spring boot项目案列

Redis 主从复制和哨兵架构是 Redis 集群的重要组成部分,用于提高 Redis 集群的可用性和性能。以下是 Redis 主从复制和哨兵架构的详细介绍,包括架构图和 Java 代码详解。

1. Redis 主从复制

Redis 主从复制是通过节点间的异步复制实现的。在 Redis 集群中,每个主节点可以有多个从节点,每个从节点只能有一个主节点。当一个主节点接收到写入操作时,它会将这个操作记录在自己的本地数据库中,并将操作复制到所有从节点中。从节点通过复制积压缓冲区获取这些命令,并在本地执行它们,以保证从节点的数据和主节点的数据一致。
Redis 主从复制的架构图如下所示:

+--------------------+           +--------------------+  
|    Master        |<--------->|    Slave         |  
+--------------------+           +--------------------+  |                 |             |  |                 |             |  |                 |             |  
+--------------------+           +--------------------+  
|    Master        |<--------->|    Slave         |  
+--------------------+           +--------------------+  

在 Java 中,创建一个 Redis 主节点需要使用 RedisServer 类,创建一个 Redis 从节点需要使用 RedisSlave 类。以下是一个简单的 Java 代码示例,用于创建一个 Redis 主节点和一个从节点:

import redis.clients.jedis.Jedis;  
import redis.clients.jedis.JedisPool;  
import redis.clients.jedis.RedisClient;
public class Main {  public static void main(String[] args) {  // 创建 Redis 主节点  RedisServer redisServer = new RedisServer(6379);  redisServer.start();// 创建 Redis 从节点  RedisClient slaveClient = new RedisClient(redisServer.getAddress(), 6379);  slaveClient.connect();// 执行主节点和从节点之间的同步  slaveClient.slaveOf(redisServer.getAddress(), 6379);  }  
}

2. Redis 哨兵架构

Redis 哨兵模式是在 Redis 主从的基础上进行升级的,它可以选举 master,并在 master 故障的时候进行切换。Redis 哨兵通过 sentinel.conf 配置文件来存放配置,其中包括 sentinel 的监听端口、master 的 IP 地址和端口号等信息。
Redis 哨兵架构图如下所示:

+--------------------+       +--------------------+  
|        Sentinel       |<--------->|    Master        |  
+--------------------+       +--------------------+  |                   |             |  |                   |             |  |                   |             |  
+--------------------+       +--------------------+  
|        Sentinel       |<--------->|    Master        |  
+--------------------+       +--------------------+  

在 Java 中,可以使用 RedisSentinel 类来创建一个 Redis 哨兵节点。以下是一个简单的 Java 代码示例,用于创建一个 Redis 哨兵节点:

import redis.clients.jedis.Jedis;  
import redis.clients.jedis.JedisPool;  
import redis.clients.jedis.RedisClient;
public class Main {  public static void main(String[] args) {  // 创建 Redis 哨兵节点  RedisSentinel sentinel = new RedisSentinel("sentinel.conf");  sentinel.start();// 执行哨兵节点的同步  sentinel.syncConfig();  }  
}

综上所述,Redis 主从复制和哨兵架构是 Redis 集群的重要组成部分,它们可以提高 Redis 集群的可用性和性能。在 Java 中,可以使用 RedisServer、RedisClient 和 RedisSentinel 类来创建 Redis 主节点、从节点和哨兵节点。

3. 集成spring boot项目案列

Redis 主从复制和哨兵模式是 Redis 集群的基础架构,可以在多个节点之间同步数据,提高 Redis 的可用性和性能。在 Spring Boot 项目中,可以使用 Redis 的事务来实现分布式锁和并发控制等功能。
以下是一个简单的示例,展示如何在 Spring Boot 项目中集成 Redis 主从复制和哨兵模式:

  1. 首先,在 pom.xml 文件中添加对 Redis 依赖的配置:
<dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-data-redis</artifactId>  
</dependency>  
  1. 创建 Redis 配置类,设置主从复制和哨兵模式的相关参数:
@Configuration  
@EnableTransactionManagement  
public class RedisConfig {@Bean  public RedisTemplate<String, Object> redisTemplate(JedisConnectionFactory jedisConnectionFactory) {  RedisTemplate<String, Object> template = new RedisTemplate<>();  template.setConnectionFactory(jedisConnectionFactory);  template.setEnableTransactionSupport(true);  return template;  }@Bean  public RedisSlave slave(JedisConnectionFactory jedisConnectionFactory) {  RedisSlave slave = new RedisSlave();  slave.setMasterAddress("localhost", 6379);  slave.setPassword("password");  slave.setDatabase(0);  jedisConnectionFactory.setSlaveOFlag(true);  return slave;  }@Bean  public RedisMaster master(JedisConnectionFactory jedisConnectionFactory) {  RedisMaster master = new RedisMaster();  master.setHostName("localhost");  master.setPort(6379);  master.setPassword("password");  master.setDatabase(0);  jedisConnectionFactory.setMasterOFlag(true);  return master;  }  
}

在配置类中,我们创建了 RedisTemplate、RedisSlave 和 RedisMaster 三个 bean。RedisTemplate 用于配置 Redis 连接和事务支持,RedisSlave 和 RedisMaster 用于配置从节点和主节点的相关参数。
3. 在 Spring Boot 应用程序中使用 Redis 事务来实现分布式锁和并发控制等功能:

@Service  
public class LockService {private final RedisTemplate<String, Object> redisTemplate;public LockService(RedisTemplate<String, Object> redisTemplate) {  this.redisTemplate = redisTemplate;  }public void lock(String lockKey) {  try {  redisTemplate.set(lockKey, "locked", 3000);  } catch (Exception e) {  e.printStackTrace();  }  }public void unlock(String lockKey) {  try {  redisTemplate.delete(lockKey);  } catch (Exception e) {  e.printStackTrace();  }  }  
}

在这个示例中,我们创建了一个 LockService 类,它使用 RedisTemplate 来实现分布式锁的功能。lock 方法尝试在 Redis 中设置一个锁键,如果设置成功则表示获取到锁,否则抛出异常。unlock 方法尝试在 Redis 中删除锁键,如果删除成功则表示释放锁,否则抛出异常。
以上是一个简单的示例,展示了如何在 Spring Boot 项目中集成 Redis 主从复制和哨兵模式。通过使用 Redis 事务和分布式锁,可以实现高并发和分布式环境下的优雅编程。

相关文章:

Redis主从复制和哨兵架构图,集成Spring Boot项目实战分享

目录 1. Redis 主从复制2. Redis 哨兵架构3. 集成spring boot项目案列 Redis 主从复制和哨兵架构是 Redis 集群的重要组成部分&#xff0c;用于提高 Redis 集群的可用性和性能。以下是 Redis 主从复制和哨兵架构的详细介绍&#xff0c;包括架构图和 Java 代码详解。 1. Redis …...

java中try-with-resources自动关闭io流

文章目录 java中try-with-resources自动关闭io流0 简要说明try-with-resources java中try-with-resources自动关闭io流 0 简要说明 在传统的输入输出流处理中&#xff0c;我们一般使用的结构如下所示&#xff0c;使用try - catch - finally结构捕获相关异常&#xff0c;最后不…...

Games101学习笔记 -光栅化

光栅化 经过MVP矩阵和视口变换后&#xff0c;我们就可以从相机的角度看到一个和屏幕大小一致的二维平面。 那么把这个看到的二维平面应用到我们的屏幕上的过程就是光栅化。在这儿我们需要补充一个概念-像素&#xff1a; 像素&#xff1a; 一个二位数组&#xff0c;数组中每个…...

Pytorch量化之Post Train Static Quantization(训练后静态量化)

使用Pytorch训练出的模型权重为fp32&#xff0c;部署时&#xff0c;为了加快速度&#xff0c;一般会将模型量化至int8。与fp32相比&#xff0c;int8模型的大小为原来的1/4, 速度为2~4倍。 Pytorch支持三种量化方式&#xff1a; 动态量化&#xff08;Dynamic Quantization&…...

Sql奇技淫巧之EXIST实现分层过滤

在这样一个场景&#xff0c;我 left join 了很多张表&#xff0c;用这些表的不同列来过滤&#xff0c;看起来非常合理 但是出现的问题是 left join 其中一张或多张表出现了笛卡尔积&#xff0c;且无法消除 FUNCTION fun_get_xxx_helper(v_param_1 VARCHAR2,v_param_2 VARCHAR2…...

Linux下升级jdk1.8小版本

先输入java -version 查看是否安装了jdk java -version &#xff08;1&#xff09;如果没有返回值&#xff0c;直接安装新的jdk即可。 &#xff08;2&#xff09;如果有返回值&#xff0c;例如&#xff1a; java version "1.8.0_251" Java(TM) SE Runtime Enviro…...

【Mysql】数据库基础与基本操作

&#x1f307;个人主页&#xff1a;平凡的小苏 &#x1f4da;学习格言&#xff1a;命运给你一个低的起点&#xff0c;是想看你精彩的翻盘&#xff0c;而不是让你自甘堕落&#xff0c;脚下的路虽然难走&#xff0c;但我还能走&#xff0c;比起向阳而生&#xff0c;我更想尝试逆风…...

87 | Python人工智能篇 —— 机器学习算法 决策树

本教程将深入探讨决策树的基本原理,包括特征选择方法、树的构建过程以及剪枝技术,旨在帮助读者全面理解决策树算法的工作机制。同时,我们将使用 Python 和 scikit-learn 库演示如何轻松地实现和应用决策树,以及如何对结果进行可视化。无论您是初学者还是有一定机器学习经验…...

【计算机视觉】干货分享:Segmentation model PyTorch(快速搭建图像分割网络)

一、前言 如何快速搭建图像分割网络&#xff1f; 要手写把backbone &#xff0c;手写decoder 吗&#xff1f; 介绍一个分割神器&#xff0c;分分钟搭建一个分割网络。 仓库的地址&#xff1a; https://github.com/qubvel/segmentation_models.pytorch该库的主要特点是&#…...

解析湖仓一体的支撑技术及实践路径

自2021年“湖仓一体”首次写入Gartner数据管理领域成熟度模型报告以来&#xff0c;随着企业数字化转型的不断深入&#xff0c;“湖仓一体”作为新型的技术受到了前所未有的关注&#xff0c;越来越多的企业视“湖仓一体” 为数字化转型的重要基础设施。 01 数据平台的发展历程…...

40.利用欧拉法求解微分方程组(matlab程序)

1.简述 求解微分方程的时候&#xff0c;如果不能将求出结果的表达式&#xff0c;则可以对利用数值积分对微分方程求解&#xff0c;获取数值解。欧拉方法是最简单的一种数值解法。前面介绍过MATLAB实例讲解欧拉法求解微分方程&#xff0c;今天实例讲解欧拉法求解一阶微分方程组。…...

OpenAI-Translator 实战总结

最近在极客时间学习《AI 大模型应用开发实战营》&#xff0c;自己一边跟着学一边开发了一个进阶版本的 OpenAI-Translator&#xff0c;在这里简单记录下开发过程和心得体会&#xff0c;供有兴趣的同学参考 功能概览 通过openai的chat API&#xff0c;实现一个pdf翻译器实现一个…...

【工业机器人】用于轨迹规划和执行器分析的机械手和移动机器人模型(MatlabSimulink)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

开源在线文档服务OnlyOffice

开源在线文档服务OnlyOffice应用启动与示例运行 - 掘金 ONLYOFFICE API 文档 - Example - IDEA运行Java示例 | ONLYOFFICE中文网 NEXTCLOUDonlyoffice的搭建和使用_nextcloud onlyoffice_莫冲的博客-CSDN博客 OnlyOffice java 部署使用&#xff0c;文件流方式 预览文件 | 言曌博…...

汽车基本常识

目录 电源KL30KL15 零部件简称 电源 KL30 KL15 零部件简称 VCU&#xff1a;整车控制器 直接网络管理节点 CDU&#xff1a;充电系统控制器 MCU&#xff1a;电机控制器 TCU&#xff1a;变速箱控制器 ABS&#xff1a;防抱死系统 EPS&#xff1a;助力转向 T-Box&#xff1a;远程…...

百度资深PMO阚洁受邀为第十二届中国PMO大会演讲嘉宾

百度在线网络技术&#xff08;北京&#xff09;有限公司资深PMO阚洁女士受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾&#xff0c;演讲议题&#xff1a;运筹于股掌之间&#xff0c;决胜于千里之外 —— 360斡旋项目干系人。大会将于8月12-13日在北京举办&#xff0c;…...

为什么C++有多种整型?

C中有多种整型是为了满足不同的需求&#xff0c;提供更灵活和高效的整数表示方式。不同的整型具有不同的字节大小、范围和精度&#xff0c;可以根据应用的需求选择合适的整型类型。以下是一些原因解释为什么C有多种整型&#xff1a; 内存和性能优化&#xff1a;不同的整型在内存…...

玩一玩通义千问Qwen开源版,Win11 RTX3060本地安装记录!

大概在两天前&#xff0c;阿里做了一件大事儿。 就是开源了一个低配版的通义千问模型--通义千问-7B-Chat。 这应该是国内第一个大厂开源的大语言模型吧。 虽然是低配版&#xff0c;但是在各类测试里面都非常能打。 官方介绍&#xff1a; Qwen-7B是基于Transformer的大语言模…...

oracle积累增量和差异增量

积累增量和差异增量&#xff1a; 对于 RMAN 来说&#xff0c;积累增量备份和差异增量备份都是增量备份的一种形式&#xff0c;它们之间的区别在于备份的范围和备份集的方式。 积累增量备份&#xff1a;在进行积累增量备份时&#xff0c;RMAN 会备份自最后一次完全备份或增量备…...

利用C++nlohmann库解析json文件

json文件示例&#xff1a; 代码运行环境VS2019 一、git下载nlohmann库文件源代码 源代码文件目录 二、利用VS2019新建工程&#xff0c;并配置项目属性 配置VC目录---包含目录 三、项目源代码 #include <iostream> #include <fstream> #include <nlohmann/jso…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时&#xff0c;遇到的一些问题总结一下 [参考文档]&#xff1a;https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现&#xff1a; 今天在看到这个教程的时候&#xff0c;在自己的电…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...

[拓扑优化] 1.概述

常见的拓扑优化方法有&#xff1a;均匀化法、变密度法、渐进结构优化法、水平集法、移动可变形组件法等。 常见的数值计算方法有&#xff1a;有限元法、有限差分法、边界元法、离散元法、无网格法、扩展有限元法、等几何分析等。 将上述数值计算方法与拓扑优化方法结合&#…...

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...