当前位置: 首页 > 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…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

django blank 与 null的区别

1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是&#xff0c;要注意以下几点&#xff1a; Django的表单验证与null无关&#xff1a;null参数控制的是数据库层面字段是否可以为NULL&#xff0c;而blank参数控制的是Django表单验证时字…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...

五子棋测试用例

一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏&#xff0c;有着深厚的文化底蕴。通过将五子棋制作成网页游戏&#xff0c;可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家&#xff0c;都可以通过网页五子棋感受到东方棋类…...

Python常用模块:time、os、shutil与flask初探

一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...