首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SpringBoot3.4.3整合redis集群太简单了,简单到只需两步配置,不用写一行代码

前一段时间安装了redis集群,现在就将redis集群整合到Spring Boot项目中。

一、环境准备

1、已经安装并配置好Redis集群

可以通过命令行或其他工具(如Redis Desktop Manager)来验证Redis集群的健康状况。

2、一个现成的 Spring Boot 3.4.3项目

JDK17及以上。

二、Spring Boot 框架整合Redis 集群

1、pom中添加依赖

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-data-redis</artifactId>

2、 配置application.properties文件

# 集群节点

spring.data.redis.cluster.nodes=127.0.0.1:7001,127.0.0.1:7002,127.0.0.1:7003,127.0.0.1:7004,127.0.0.1:7005,127.0.0.1:7006

spring.redis.cluster.max-redirects=6

#spring.data.redis.password=

spring.data.redis.timeout=5000

# 默认连接池的配置

spring.data.redis.lettuce.pool.max-idle=100

spring.data.redis.lettuce.pool.min-idle=50

spring.data.redis.lettuce.pool.max-wait=2000

spring.data.redis.lettuce.pool.max-active=10

spring.data.redis.cluster.nodes:指定 Redis 集群的节点地址列表。格式为 host:port,多个节点用逗号分隔。

spring.redis.cluster.max-redirects:设置集群重定向的最大次数。当客户端请求的 key 不在当前节点时,会收到重定向响应,这里设置为 6,与节点数相同是常见做法。

spring.data.redis.timeout:定义 Redis 命令的超时时间(毫秒),这里设置为 5000 毫秒(5 秒)。

Lettuce 是 Spring Boot 2.x 以来默认的 Redis 客户端。

spring.data.redis.lettuce.pool.max-idle:连接池中最大空闲连接数,这里设置为 100。

spring.data.redis.lettuce.pool.min-idle:连接池中最小空闲连接数,这里设置为 50。

spring.data.redis.lettuce.pool.max-wait:当连接池耗尽时,获取连接的最大等待时间(毫秒),这里设置为 2000 毫秒(2 秒),超过这个时间会抛出异常。

spring.data.redis.lettuce.pool.max-active:连接池最大连接数(包括空闲和使用中的连接),这里设置为 10。

三、简单应用

经过以上两步,自动配置就生效了,我们可以直接通过 @Autowired 调用 RedisTemplate 模板方法,来操作redis集群数据库。

@Autowired

private StringRedisTemplate stringRedisTemplate;

publicvoidtestRedis(){

  stringRedisTemplate.opsForValue().set("key", "value");

  String value = stringRedisTemplate.opsForValue().get("key");

  System.out.println(value);

}

把这段代码放到控制层或服务层,就可以进行测试了。

只要我们使用了 spring-boot-starter-data-redis + 正确的application.properties 配置, 是不需要额外手动写 @Bean 的,Spring Boot 自动根据配置创建连接工厂(比如 LettuceConnectionFactory),并且自动帮我们装配好 RedisTemplate 和 StringRedisTemplate,我们直接使用即可。

四、额外配置

1、自定义 RedisTemplate 的序列化器

如果我们需要自定义 RedisTemplate 的序列化器,比如 Key 要用 String,Value 要用 JSON,那么我们需要配置一个@Bean来做这件事。

@Configuration

publicclassRedisConfig {

  @Bean

  public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {

      RedisTemplate<String, Object> template = new RedisTemplate<>();

template.setConnectionFactory(redisConnectionFactory);

      // 设置 Key 和 Value 的序列化器

      StringRedisSerializer keySerializer = new StringRedisSerializer();

      GenericJackson2JsonRedisSerializer valueSerializer = new GenericJackson2JsonRedisSerializer();

template.setKeySerializer(keySerializer);

template.setValueSerializer(valueSerializer);

template.setHashKeySerializer(keySerializer);

template.setHashValueSerializer(valueSerializer);

template.afterPropertiesSet();

returntemplate;

      }

  }

RedisConnectionFactory redisConnectionFactory是 Redis的连接工厂,用于创建 Redis 的连接,这里默认的是LettuceConnectionFactory 工厂实现。

RedisTemplate 是一个泛型类,在这里指定了 Key 的类型为 String,Value 的类型为 Object。

调用 setConnectionFactory 方法,将 redisConnectionFactory 传递给 RedisTemplate,使其知道如何与 Redis 服务器建立连接。

StringRedisSerializer 用于将 Redis 的 Key 序列化为字符串(String),并将字符串反序列化为 Java 的 String 对象。Redis 的 Key 通常以字符串形式存储,因此使用 StringRedisSerializer 是很常见的做法。

GenericJackson2JsonRedisSerializer 用于将 Redis 的 Value 序列化为 JSON 格式,并将 JSON 反序列化为 Java 对象。与 StringRedisSerializer 不同,这种序列化器可以处理复杂的对象结构,适合存储非字符串类型的值(如自定义对象)。

setHashKeySerializer 表示:如果 Redis 中存储的是 Hash类型的数据(即 HSET 命令),还需要为 Hash 的 Key 和 Value 分别设置序列化器。这里分别复用了前面定义的 StringRedisSerializer 和GenericJackson2JsonRedisSerializer。

调用afterPropertiesSet() 方法,确保RedisTemplate 的所有属性(如连接工厂、序列化器等)都已正确设置。这是 Spring 的InitializingBean 接口中的方法,RedisTemplate 实现了该接口。

最后返回配置完成的 RedisTemplate 对象,供 Spring 容器管理并注入到其他需要的地方。

2、切换 Redis 客户端、连接池配置

spring-boot-starter-data-redis框架默认使用 Lettuce,如果要切换为 Jedis ,就需要引入 Jedis架包,并进行自定义配置。

还有其他业务场景,有需要再研究吧!

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OxqvjkVY6ae18Jcb_Bi2C2KA0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券