SpringBoot Redis 使用Lettuce和Jedis配置哨兵模式

Redis 从入门到精通【应用篇】之SpringBoot Redis 配置哨兵模式 Lettuce 和Jedis

文章目录

  • Redis 从入门到精通【应用篇】之SpringBoot Redis 配置哨兵模式 Lettuce 和Jedis
  • 前言
    • Lettuce和Jedis区别
      • 1. 连接方式
      • 2. 线程安全性
  • 教程如下
  • 1. Lettuce 方式配置
    • 1.1. 添加 Redis 和 Lettuce 依赖
    • 1.2. 配置 Redis 哨兵模式
    • 1.3. 创建自定义 RedisConnectionFactory以及RedisTemplate
  • 2. Jedis 方式配置
    • 2.1. 添加 Redis 和 Jedis 依赖
    • 2.2. 配置 Redis 哨兵模式
    • 2.3. 创建自定义 RedisTemplate
  • 3. 总结
  • 3. Redis从入门到精通系列文章

在这里插入图片描述

前言

在Spring Boot 中配置Redis哨兵模式,可以使用 Lettuce 或 Jedis 配置 Redis 哨兵模式,实现高可用的 Redis 集群。
因为在Spring Boot中spring-boot-starter-data-redis已经实现了两种客户端链接方式,我们选择其中一种就可以。
在这里插入图片描述

Lettuce和Jedis区别

Lettuce 和 Jedis 都是 Redis 客户端库,可以与 Redis 服务器进行通信。它们的区别在于:

1. 连接方式

  • Lettuce 采用 Netty 底层网络框架,使用异步非阻塞式 IO 模型,支持多个 Redis 节点的连接池复用,适合高并发场景。
  • Jedis 采用传统的阻塞 IO 模型,每个 Redis 节点需要维护一个连接池,适合低并发场景。

2. 线程安全性

  • Lettuce 是线程安全的,可以在多线程环境下共享连接,而 Jedis 不是线程安全的,需要使用连接池进行连接复用。

在 Spring Boot 中配置 Redis 哨兵模式使用 Lettuce 和Jedis 作为 Redis 客户端的步骤分别如下。
推荐使用Lettuce 方式配置

教程如下

1. Lettuce 方式配置

1.1. 添加 Redis 和 Lettuce 依赖

在 pom.xml 文件中添加 Redis 和 Lettuce 依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

因为默认情况下Spring-boot-starter-data-redis 已经引入了lettuce 所以我们不需要再引入客户端lettuce。只需要引入上面的Starter就OK。
在这里插入图片描述

1.2. 配置 Redis 哨兵模式

在 application.properties 或 application.yml 文件中添加 Redis 的配置信息:
两种配置方式我都罗列出来

# Redis 主节点的名称
spring.redis.sentinel.master=your-master-name
# Redis 哨兵节点的地址,多个节点之间使用逗号分隔
spring.redis.sentinel.nodes=127.0.0.1:26379,127.0.0.1:26380,127.0.0.1:26381
# Redis 访问密码
spring.redis.password=your-redis-password
# Lettuce 连接池最大连接数
spring.redis.lettuce.pool.max-active=8
# Lettuce 连接池最大空闲连接数
spring.redis.lettuce.pool.max-idle=8
# Lettuce 连接池最小空闲连接数
spring.redis.lettuce.pool.min-idle=0
# Lettuce 连接池最大等待时间
spring.redis.lettuce.pool.max-wait=5000ms

或者使用yaml配置方式,要看大家已有项目的配置方式,保持一致。

spring:
  redis:
    sentinel:
      master: your-master-name
      nodes: 127.0.0.1:26379,127.0.0.1:26380,127.0.0.1:26381
    password: your-redis-password
    lettuce:
      pool:
        max-active: 8
        max-idle: 8
        min-idle: 0
        max-wait: 5000ms

配置解释一下 此处的配置中带Lettuce 的事SpringBoot 配置Redis 使用Lettuce 的专项配置。不带的事公共配置。

  • spring.redis.sentinel.master:Redis 主节点的名称,用于访问 Redis 哨兵获取主节点的信息。
  • spring.redis.sentinel.nodes:Redis 哨兵节点的地址,多个节点之间使用逗号分隔。
  • spring.redis.password:Redis 访问密码,用于连接 Redis 时进行认证。
  • spring.redis.lettuce.pool.max-active:Lettuce 连接池最大连接数,用于限制连接池中的最大连接数。
  • spring.redis.lettuce.pool.max-idle:Lettuce 连接池最大空闲连接数,用于限制连接池中的最大空闲连接数。
  • spring.redis.lettuce.pool.min-idle:Lettuce 连接池最小空闲连接数,用于限制连接池中的最小空闲连接数。
  • spring.redis.lettuce.pool.max-wait:Lettuce 连接池最大等待时间,用于限制获取连接的最大等待时间。

其实配置完上面的配置基本上就是可以使用了,因为Spring Boot的实例化Redis客户端的顺序是先判断是否哨兵Sentinel模式,再接下来Cluster模式,接下来才是单机模式Standalone.
在这里插入图片描述

1.3. 创建自定义 RedisConnectionFactory以及RedisTemplate

在 Spring Boot 中,可以通过 RedisConnectionFactory 来连接 Redis。在配置文件中配置 RedisConnectionFactory 的相关信息后,可以通过在代码中注入 RedisConnectionFactory Bean 来使用 Redis。其实也可以直接使用默认的Bean。默认的在LettuceConnectionConfiguration 中已经配置,如果需要自定义配置可以使用以下方式。

我们定义了一个 RedisConfig 类,并创建了一个 RedisTemplate 的 Bean。在 RedisConfig 类中,我们注入了 RedisProperties 类,并将 Redis 的配置信息通过 RedisSentinelConfiguration的方式配置到 LettuceConnectionFactory 中,然后再将 LettuceConnectionFactory 注入到 RedisTemplate 中。

@Configuration
public class RedisConfig {

    @Autowired
    private RedisProperties redisProperties;

    @Bean
    public LettuceConnectionFactory lettuceConnectionFactory() {
        RedisSentinelConfiguration sentinelConfiguration = new RedisSentinelConfiguration()
                .master(redisProperties.getSentinel().getMaster())
                .sentinel(redisProperties.getSentinel().getNodes());
		
        LettuceClientConfiguration clientConfiguration = LettuceClientConfiguration.builder()
                .commandTimeout(Duration.ofMillis(redisProperties.getTimeout()))
                .poolConfig(new GenericObjectPoolConfig<>())
                .build();

        return new LettuceConnectionFactory(sentinelConfiguration, clientConfiguration);
    }

    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(lettuceConnectionFactory());
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}

2. Jedis 方式配置

2.1. 添加 Redis 和 Jedis 依赖

Jedis 和Lettuce 的方式的区别,Lettuce 是在Redis Spring Boot Redis依赖中内置了Lettuce 的依赖,但jedis 方式虽Maven然引入了,但是可选项。所以需要手动引入
在 pom.xml 文件中添加 Redis 和 Jedis 依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
</dependency>

2.2. 配置 Redis 哨兵模式

在 application.properties 或 application.yml 文件中添加 Redis 的配置信息:

spring.redis.sentinel.master=your-master-name
spring.redis.sentinel.nodes=redis-host1:port,redis-host2:port,redis-host3:port
spring.redis.password=your-redis-password
spring:
  redis:
    sentinel:
      master: your-master-name
      nodes: 127.0.0.1:26379,127.0.0.1:26380,127.0.0.1:26381
    password: your-redis-password

其中,your-master-name 是 Redis 主节点的名称,redis-host1:port,redis-host2:port,redis-host3:port 是 Redis 哨兵节点的地址,多个节点之间使用逗号分隔。

2.3. 创建自定义 RedisTemplate

此处为可选项,也可以使用Spring Boot 默认的RedisTemplate 。

和上面Lettuce的方式类似。我们注入了 RedisProperties 类,并将 Redis 的配置信息通过 RedisSentinelConfiguration 的方式配置到 JedisConnectionFactory 中,然后再将 JedisConnectionFactory 注入到 RedisTemplate 中。

@Configuration
public class RedisConfig {

    @Autowired
    private RedisProperties redisProperties;

    @Bean
    public JedisConnectionFactory jedisConnectionFactory() {
        RedisSentinelConfiguration sentinelConfig = new RedisSentinelConfiguration()
                .master(redisProperties.getSentinel().getMaster())
                .sentinel(redisProperties.getSentinel().getNodes());

        JedisConnectionFactory connectionFactory = new JedisConnectionFactory(sentinelConfig);
        connectionFactory.setPassword(redisProperties.getPassword());
        connectionFactory.setUsePool(true);
        return connectionFactory;
    }

    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(jedisConnectionFactory());
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}

上面这两种方式基本上就配置好了,具体如何使用,可参考 《Redis【应用篇】之RedisTemplate基本操作》。

3. 总结

使用 Lettuce 或 Jedis 配置 Redis 哨兵模式的配置方法类似,都需要在配置文件中指定 Redis 哨兵的主节点名称和地址端口号等参数,然后创建相应的 RedisConnectionFactory Bean,并使用 RedisTemplate 进行 Redis 操作。Lettuce 适合高并发、多线程的场景,具有更好的性能和稳定性;Jedis 适合低并发、单线程的场景,使用起来更加简单、方便。根据实际需求和场景,可以选择使用 Lettuce 或 Jedis 来配置 Redis 哨兵模式。

3. Redis从入门到精通系列文章

  • 《Redis【应用篇】之RedisTemplate基本操作》
  • 《Redis 从入门到精通【实践篇】之SpringBoot配置Redis多数据源》
  • 《Redis 从入门到精通【进阶篇】之三分钟了解Redis HyperLogLog 数据结构》
  • 《Redis 从入门到精通【进阶篇】之三分钟了解Redis地理位置数据结构GeoHash》
  • 《Redis 从入门到精通【进阶篇】之高可用哨兵机制(Redis Sentinel)详解》
  • 《Redis 从入门到精通【进阶篇】之redis主从复制详解》
  • 《Redis 从入门到精通【进阶篇】之Redis事务详解》
  • 《Redis从入门到精通【进阶篇】之对象机制详解》
  • 《Redis从入门到精通【进阶篇】之消息传递发布订阅模式详解》
  • 《Redis从入门到精通【进阶篇】之持久化 AOF详解》
  • 《Redis从入门到精通【进阶篇】之持久化RDB详解》
  • 《Redis从入门到精通【高阶篇】之底层数据结构字典(Dictionary)详解》
  • 《Redis从入门到精通【高阶篇】之底层数据结构快表QuickList详解》
  • 《Redis从入门到精通【高阶篇】之底层数据结构简单动态字符串(SDS)详解》
  • 《Redis从入门到精通【高阶篇】之底层数据结构压缩列表(ZipList)详解》
  • 《Redis从入门到精通【进阶篇】之数据类型Stream详解和使用示例》
    在这里插入图片描述大家好,我是冰点,今天的Redis【实践篇】之SpringBoot Redis 配置多数据源,全部内容就是这些。如果你有疑问或见解可以在评论区留言。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【目标跟踪】1、基础知识

文章目录 一、卡尔曼滤波二、匈牙利匹配 一、卡尔曼滤波 什么是卡尔曼滤波&#xff1f;——状态估计器 卡尔曼滤波用于在包含不确定信息的系统中做出预测&#xff0c;对系统下一步要做什么进行推测&#xff0c;且会结合推测值和观测值来得到修正后的最优值卡尔曼滤波就是利用…

git 和adb

一、git 1、git的作用 git是一个版本控制系统&#xff0c;是一种记录一个或若干文件内容变化&#xff0c;以便将来查阅特定版本修订情况的系统。 我的理解就是代码管理器&#xff1a; 第一点你可将代码备份到git仓上&#xff1b; 第二点可记录的你修改记录&#xff1b; 第三点…

周训龙老兵参观广西森林安全紧急救援装备演练

7月21日上午&#xff0c;周训龙老兵参观广西紧急救援促进中心在南宁市青秀山举行森林安全紧急救援装备演练&#xff0c;多功能水罐消防车、无人救援机等先进设备轮番上阵&#xff0c;展示了广西应对突发事件的紧急救援速度和水平。广西壮族自治区应急厅不情愿参此次演练活动。 …

Python Flask构建微信小程序订餐系统 (十)

🔥 编辑会员信息 🔥 编辑会员信息可以通过点击会员列表操作,也可以点击会员信息详情点击进行操作 🔥 修改编程会员信息列表布局 🔥 修改 web/templates/member/index.html 文件,添加跳转到编辑会员信息的页面 web/templates/member/set.html 🔥 创建用于会员…

Mybatis单元测试,不使用spring

平时开发过程中需要对mybatis的Mapper类做单元测试&#xff0c;主要是验证语法是否正确&#xff0c;尤其是一些复杂的动态sql&#xff0c;一般项目都集成了spring或springboot&#xff0c;当项比较大时&#xff0c;每次单元测试启动相当慢&#xff0c;可能需要好几分钟&#xf…

OpenCV图像处理-图像分割-MeanShift

MeanShift 1. 基本概念2.代码示例 1. 基本概念 MeanShift严格说来并不是用来对图像进行分割的&#xff0c;而是在色彩层面的平滑滤波。它会中和色彩分布相近的颜色&#xff0c;平滑色彩细节&#xff0c;侵蚀掉面积较小的的颜色区域&#xff0c;它以图像上任意一点P为圆心&…

优思学院|六西格玛案例分析 - 降低焊接缺陷率

大家都知道六西格玛方法中的控制图有助于监测流程的稳定性和识别特有原因的发生。对流程周期性地采样&#xff0c;当测量结果在控制上限和下限内&#xff0c;而且围绕着一条中心线时&#xff0c;我们就说流程是受控的。注意上述控制上限和下限有别于规范限。 我们来看看一家工…

电脑安装双系统ubuntu18.04+windows后开机直接进入Windows解决方法

电脑型号&#xff1a;联想拯救者Y9000K2021H 系统&#xff1a;Windows11Ubuntu18.04双系统 问题&#xff1a;笔记本安装双系统后&#xff0c;Windows系统下处理word或者看论文&#xff1b;Ubuntu18.04系统安装ros进行机械臂控制等的研究。但最近开机后发现没有系统选项了&#…

知识库数据导出为excel-使用JavaScript实现在浏览器中导出Excel文件

我们智能客服知识库机器人已经开发完成&#xff0c;后端数据库是使用的qdrant向量数据库&#xff0c;但是该数据库并没有导出备份功能&#xff0c;所以我按简单的纯前端实现知识库导出excel数据 使用第三方库(如SheetJS) SheetJS是一个流行的JavaScript库&#xff0c;可帮助处理…

App隐私及合规评估服务

随着移动应用种类和数量呈爆发式增长&#xff0c;APP侵害用户权益事件层出不穷&#xff0c;为规范个人信息的收集使用&#xff0c;打击涉及个人信息违法犯罪行为&#xff0c;我国相继出台多个涉及个人信息保护相关法律法规。与此同时&#xff0c;中央网信办、工信部、公安部、市…

获取大疆无人机的飞控记录数据并绘制曲线

机型M350RTK&#xff0c;其飞行记录文件为加密的&#xff0c;我的完善代码如下 gitgithub.com:huashu996/DJFlightRecordParsing2TXT.git 一、下载安装官方的DJIFlightRecord git clone gitgithub.com:dji-sdk/FlightRecordParsingLib.git飞行记录文件在打开【我的电脑】&am…

Istio Pilot源码学习(二):ServiceController服务发现

本文基于Istio 1.18.0版本进行源码学习 4、服务发现&#xff1a;ServiceController ServiceController是服务发现的核心模块&#xff0c;主要功能是监听底层平台的服务注册中心&#xff0c;将平台服务模型转换成Istio服务模型并缓存&#xff1b;同时根据服务的变化&#xff0c…

OpenHarmony与HarmonyOS联系与区别

目录 1. 背景 2.OpenHarmony 3.HarmonyOS 4.鸿蒙生态 5.OpenHarmony与HarmonyOS的技术上实现区别 1.语言支持 2.SDK 的不同 3.运行调测方式不同 4.对APK的兼容性不同 5.包含关系 6.调试命令 6.何时选择OpenHarmony或是HarmonyOS&#xff1f; 1. 背景 开篇就说“关于…

2023最新谷粒商城笔记之Sentinel概述篇(全文总共13万字,超详细)

Sentinel概述 服务流控、熔断和降级 什么是熔断 当扇出链路的某个微服务不可用或者响应时间太长时&#xff0c;会进行服务的降级&#xff0c;**进而熔断该节点微服务的调用&#xff0c;快速返回错误的响应信息。**检测到该节点微服务调用响应正常后恢复调用链路。A服务调用B服…

Spring Security 身份验证的基本类/架构

目录 1、SecurityContextHolder 核心类 2、SecurityContext 接口 3、Authentication 用户认证信息接口 4、GrantedAuthority 拥有权限接口 5、AuthenticationManager 身份认证管理器接口 6、ProviderManager 身份认证管理器的实现 7、AuthenticationProvider 特定类型的…

数字孪生管控系统,智慧园区楼宇合集

智慧园区是指将物联网、大数据、人工智能等技术应用于传统建筑和基础设施&#xff0c;以实现对园区的全面监控、管理和服务的一种建筑形态。通过将园区内设备、设施和系统联网&#xff0c;实现数据的传输、共享和响应&#xff0c;提高园区的管理效率和运营效益&#xff0c;为居…

【Spring Cloud Gateway 新一代网关】—— 每天一点小知识

&#x1f4a7; S p r i n g C l o u d G a t e w a y 新一代网关 \color{#FF1493}{Spring Cloud Gateway 新一代网关} SpringCloudGateway新一代网关&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞见云的博客&a…

中医药行业如何进行数字化转型?看天津同仁堂谈“有道有术有零代码”

张伯礼院士曾指出&#xff0c;中药制造的现代化水平&#xff0c;还停留在10%左右的阶段。中医药行业&#xff0c;老字号企业&#xff0c;该如何通过数字化焕发新活力&#xff1f; 天津同仁堂通过与伙伴云合作&#xff0c;零代码构建数字化系统&#xff0c;让技术与思维共同成长…

html,css初学

安装VSCODE ,插件&#xff1a;live server &#xff0c;html support html 然后为了更好地理解&#xff0c;请逐步输入&#xff0c;并及时查看效果 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>D…

PCB封装设计指导(十一)画出脚标,极性标识和特殊器件标识

PCB封装设计指导(十一)画出脚标,极性标识,特殊器件标识 定义完pin number之后,就需要画出器件的脚标,极性标识,特殊标识等丝印相关的信息了,这些说明对辅助PCB布局有很好的作用,当然对后续贴片也很有帮助。 如何添加,具体见如下说明 1.脚标一般都用数字表示,silks…