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

这篇具有很好参考价值的文章主要介绍了SpringBoot Redis 使用Lettuce和Jedis配置哨兵模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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


SpringBoot Redis 使用Lettuce和Jedis配置哨兵模式,Redis从入门到精通2023版,spring boot,redis,java,后端,缓存,sentinel

前言

在Spring Boot 中配置Redis哨兵模式,可以使用 Lettuce 或 Jedis 配置 Redis 哨兵模式,实现高可用的 Redis 集群。
因为在Spring Boot中spring-boot-starter-data-redis已经实现了两种客户端链接方式,我们选择其中一种就可以。
SpringBoot Redis 使用Lettuce和Jedis配置哨兵模式,Redis从入门到精通2023版,spring boot,redis,java,后端,缓存,sentinel

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。
SpringBoot Redis 使用Lettuce和Jedis配置哨兵模式,Redis从入门到精通2023版,spring boot,redis,java,后端,缓存,sentinel

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.
SpringBoot Redis 使用Lettuce和Jedis配置哨兵模式,Redis从入门到精通2023版,spring boot,redis,java,后端,缓存,sentinel

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 哨兵模式。文章来源地址https://www.toymoban.com/news/detail-603251.html

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详解和使用示例》
    SpringBoot Redis 使用Lettuce和Jedis配置哨兵模式,Redis从入门到精通2023版,spring boot,redis,java,后端,缓存,sentinel大家好,我是冰点,今天的Redis【实践篇】之SpringBoot Redis 配置多数据源,全部内容就是这些。如果你有疑问或见解可以在评论区留言。

到了这里,关于SpringBoot Redis 使用Lettuce和Jedis配置哨兵模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • redis搭建哨兵集群模式+整合springboot

    Sentinel 哨兵模式是为了弥补主从复制集群中主机宕机后,主备切换的复杂性而演变出来的。哨兵顾名思义,就是用来监控的,主要作用就是监控主从集群,自动切换主备,完成集群故障转移。 ​ Sentinel 哨兵Sentinel 哨兵介绍 ​ Sentinel 哨兵本质上是一个运行在特殊模式下的Re

    2024年01月19日
    浏览(50)
  • Redis主从复制、哨兵模式、集群模式的搭建与springboot集成

    Redis有三种模式:分别是主从同步/复制、哨兵模式、Cluster 主从复制 :主从复制是高可用Redis的基础,哨兵和群集都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单故障恢复。 缺陷:故障恢复无法自动化,写操作无

    2024年02月02日
    浏览(49)
  • 异常:Springboot中redis使用lettuce连接池经常连接超时解决

    环境 依赖 配置 1. 问题点:项目启动后,一段时间过后redis自动掉线 2. 问题分析: 这是lettuce-core的实现里,有类似心跳机制的保持长连接方式,不过心跳机制是不停的来回发心跳包直到连接不可用再去被动重新连接,而lettuce的方案是将连接池里处于空闲(idle)状态的client每

    2024年02月11日
    浏览(60)
  • Redis 主从配置、哨兵、集群模式

    目录 Redis 主从复制  主从复制的作用: 主从复制流程: 搭建Redis 主从复制 安装 Redis 环境准备 修改内核参数 安装redis 创建redis工作目录 环境变量 定义systemd服务管理脚本 修改 Redis 配置文件(Master节点操作) 修改 Redis 配置文件(Slave节点操作) 验证主从效果 Redis 哨兵模式

    2024年02月12日
    浏览(59)
  • Redis哨兵集群搭建及RedisTemplate的哨兵模式配置详解

    本文详细介绍了Redis哨兵集群的原理、架构和工作流程,包括哨兵的功能作用、故障恢复机制、选举新的master等内容。同时,提供了哨兵集群架构示意图和实例准备、配置、启动、测试的步骤。此外,还介绍了如何在Spring的RedisTemplate中配置哨兵模式,实现Redis主从集群的自动切换和节点感知。

    2024年02月14日
    浏览(48)
  • SpringBoot Redis 多数据源集成支持哨兵模式和Cluster集群模式

    大家都知道Redis在6.0版本之前是单线程工作的,这导致在一个项目中有大量读写操作的情况下,Redis单实例的性能被其他业务长时间占据,导致部分业务出现延迟现象,为了解决这个问题,部分公司项目选择使用多个Redis实例分别存储不同的业务数据和使用场景,比如IoT网关写

    2024年02月15日
    浏览(43)
  • 搭建redis主从,哨兵配置,集成到springboot中配置读写分离

    文章介绍Ubuntu系统搭建redis,并完成主从的读写分离配置,为主节点搭建三台哨兵服务,并集成到springboot中。 本篇文章是通过其他优秀博文学习后,用作学习记录使用。 大佬博客: https://blog.csdn.net/Wei_Naijia/article/details/125704197 https://blog.csdn.net/lssqk/article/details/127220990 1.Ubunt

    2024年02月09日
    浏览(46)
  • 使用docker快速搭建redis哨兵模式

    本文主要参考: https://www.cnblogs.com/coderaniu/p/15352323.html https://developer.aliyun.com/article/892805 但是这两篇博客均缺失部分关键性细节,所以重新撰文。读者可以结合本文和上述文章一起阅读。 此处略 创建 docker-compose.yml 文件,内容如下: 执行命令 docker-compose up -d 创建三个redis容器

    2024年02月09日
    浏览(37)
  • 【微服务】springboot整合redis哨兵集群使用详解

    目录 一、前言 二、环境准备 三、安装redis 3.1 前置准备 3.1.1 下载安装包

    2024年02月14日
    浏览(43)
  • springboot+redis+mysql+quartz-通过Java操作jedis使用pipeline获取缓存数据定时更新数据库

    代码讲解:6-点赞功能-定时持久化到数据库-pipeline+lua-优化pipeline_哔哩哔哩_bilibili https://www.bilibili.com/video/BV1yP411C7dr 代码: blogLike_schedule/like06 · xin麒/XinQiUtilsOrDemo - 码云 - 开源中国 (gitee.com) https://gitee.com/flowers-bloom-is-the-sea/XinQiUtilsOrDemo/tree/master/blogLike_schedule/like06 数据库表的

    2024年02月16日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包