当前位置: 首页 > 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 事务和分布式锁,可以实现高并发和分布式环境下的优雅编程。

http://www.lryc.cn/news/117138.html

相关文章:

  • java中try-with-resources自动关闭io流
  • Games101学习笔记 -光栅化
  • Pytorch量化之Post Train Static Quantization(训练后静态量化)
  • Sql奇技淫巧之EXIST实现分层过滤
  • Linux下升级jdk1.8小版本
  • 【Mysql】数据库基础与基本操作
  • 87 | Python人工智能篇 —— 机器学习算法 决策树
  • 【计算机视觉】干货分享:Segmentation model PyTorch(快速搭建图像分割网络)
  • 解析湖仓一体的支撑技术及实践路径
  • 40.利用欧拉法求解微分方程组(matlab程序)
  • OpenAI-Translator 实战总结
  • 【工业机器人】用于轨迹规划和执行器分析的机械手和移动机器人模型(MatlabSimulink)
  • 开源在线文档服务OnlyOffice
  • 汽车基本常识
  • 百度资深PMO阚洁受邀为第十二届中国PMO大会演讲嘉宾
  • 为什么C++有多种整型?
  • 玩一玩通义千问Qwen开源版,Win11 RTX3060本地安装记录!
  • oracle积累增量和差异增量
  • 利用C++nlohmann库解析json文件
  • OpenCV 中的光流 (C++/Python)
  • 第9集丨Vue 江湖 —— 监测数据原理
  • 【YOLO】替换骨干网络为轻量级网络MobileNet3
  • 如何识别手机是否有灵动岛(dynamic island)
  • Linux设备树简介
  • Ubuntu类IOS主题设置
  • RabbitMQ学习——发布订阅/fanout模式 topic模式 rabbitmq回调确认 延迟队列(死信)设计
  • Leetcode算法递归类—合并两个有序链表
  • YOLOv5可视化界面
  • C语言使用库函数实现大小写字母转换
  • Redis简单学习