springBoot (springCloud2025)集成redisCluster 集群的操作方法

 更新时间:2025年11月13日 10:37:51   作者:Java 码农  
文章介绍了如何使用Spring Boot集成Redis Cluster集群,并详细说明了pom.xml、application.yaml、集群配置类、其他配置类、连接池配置类、Redis工具类以及测试接口的配置和使用方法,感兴趣的朋友跟随小编一起看看吧

在Spring Boot项目中集成Redis Cluster,你可以使用Spring Data Redis库,它提供了对Redis操作的抽象和封装。

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>3.5.6</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.emall</groupId>
	<artifactId>account-service</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>account-service</name>
	<description>account service</description>
	<url/>
	<licenses>
		<license/>
	</licenses>
	<developers>
		<developer/>
	</developers>
	<scm>
		<connection/>
		<developerConnection/>
		<tag/>
		<url/>
	</scm>
	<properties>
		<java.version>17</java.version>
		<spring-cloud.version>2025.0.0</spring-cloud.version> <!-- 添加 Spring Cloud 版本 -->
	</properties>
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring-cloud.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web-services</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<!---   redis 以及数据绑定 开始-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-redis</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-pool2</artifactId>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
		</dependency>
		<!-- Redis客户端:Lettuce(默认,支持集群) -->
		<dependency>
			<groupId>io.lettuce</groupId>
			<artifactId>lettuce-core</artifactId>
		</dependency>
		<!-- Spring Boot Configuration Processor -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</dependency>
		<!---   redis 以及数据绑定 结束-->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-context</artifactId>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<scope>provided</scope>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

application.yaml

spring:
  application:
    name: account-service
  redis:
    password: wa123456
    cluster:
      password:
        ${spring.redis.password}
      nodes:
        - 192.168.88.104:6379
        - 192.168.88.104:6380
        - 192.168.88.105:6379
        - 192.168.88.105:6380
        - 192.168.88.106:6379
        - 192.168.88.106:6380
      max-redirects: 3
    lettuce:
      pool:
        max-active: 20
        max-idle: 10
        min-idle: 5
        max-wait: 2000ms
      cluster:
        refresh:
          adaptive: true
          period: 200
    timeout: 5000ms
    connect-timeout: 3000ms
eureka:
  instance:
    hostname: localhost
    instance-id: ${spring.application.name}:${spring.application.instance_id:${random.value}}
  client:
    service-url:
      defaultZone: http://${eureka.instance.hostname}:8761/eureka
server:
  port: 8760
logging:
  level:
    com.emall.account_service: DEBUG

cluster配置类

package com.emall.account_service.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import java.util.ArrayList;
import java.util.List;
@ConfigurationProperties(prefix = "spring.redis.cluster")
@Data
public class RedisClusterProperties {
    private List<String> nodes = new ArrayList<>();
    private Integer maxRedirects = 3;
    private String password;
}

其他配置类

package com.emall.account_service.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import java.time.Duration;
@ConfigurationProperties(prefix = "spring.redis")
@Data
public class RedisCommonProperties {
    private Duration timeout = Duration.ofMillis(2000);
    private String password;
    private Integer database = 0;
    private Lettuce lettuce = new Lettuce();
    @Data
    public static class Lettuce {
        private Pool pool = new Pool();
        private Cluster cluster = new Cluster();
        @Data
        public static class Pool {
            private int maxActive = 8;
            private int maxIdle = 8;
            private int minIdle = 0;
            private Duration maxWait = Duration.ofMillis(-1);
        }
        @Data
        public static class Cluster {
            private Refresh refresh = new Refresh();
            @Data
            public static class Refresh {
                private Boolean adaptive = true;
                private Duration period = Duration.ofMillis(2000);
            }
        }
    }
}

连接池配置类

package com.emall.account_service.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import java.time.Duration;
@ConfigurationProperties(prefix = "spring.redis.lettuce.pool")
@Data
public class LettucePoolProperties {
    private int maxActive = 8;
    private int maxIdle = 8;
    private int minIdle = 0;
    private Duration maxWait = Duration.ofMillis(-1);
    private Duration timeBetweenEvictionRuns = Duration.ofMillis(30000);
}

redis 工具类

package com.emall.account_service.utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.util.concurrent.TimeUnit;
@Component
public class RedisUtil {
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    /**
     * 设置缓存
     */
    public void set(String key, Object value) {
        redisTemplate.opsForValue().set(key, value);
    }
    /**
     * 设置缓存并设置过期时间
     */
    public void set(String key, Object value, long timeout, TimeUnit unit) {
        redisTemplate.opsForValue().set(key, value, timeout, unit);
    }
    /**
     * 获取缓存
     */
    public Object get(String key) {
        return redisTemplate.opsForValue().get(key);
    }
    /**
     * 删除缓存
     */
    public Boolean delete(String key) {
        return redisTemplate.delete(key);
    }
    /**
     * 设置过期时间
     */
    public Boolean expire(String key, long timeout, TimeUnit unit) {
        return redisTemplate.expire(key, timeout, unit);
    }
    /**
     * 判断key是否存在
     */
    public Boolean hasKey(String key) {
        return redisTemplate.hasKey(key);
    }
    /**
     * 哈希操作 - 设置字段值
     */
    public void hSet(String key, String field, Object value) {
        redisTemplate.opsForHash().put(key, field, value);
    }
    /**
     * 哈希操作 - 获取字段值
     */
    public Object hGet(String key, String field) {
        return redisTemplate.opsForHash().get(key, field);
    }
    /**
     * 列表操作 - 左推
     */
    public Long lPush(String key, Object value) {
        return redisTemplate.opsForList().leftPush(key, value);
    }
    /**
     * 列表操作 - 右弹出
     */
    public Object rPop(String key) {
        return redisTemplate.opsForList().rightPop(key);
    }
}

测试接口

package com.emall.account_service.controller;
import com.emall.account_service.utils.RedisUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class AccountFeignController {
    @Autowired
    private RedisUtil redisUtil;
    @GetMapping("/account/address")
    public String getAddress(){
        return "account-service:8760";
    }
    @GetMapping("/account/add")
    public String addRedis(){
        String key = "user:account:";
        String value= "刘e非";
        redisUtil.set(key,value);
        System.out.println("保存数据成果");
        System.out.println("获取数据成果"+redisUtil.get(key));
        return "success";
   }
}

到此这篇关于springBoot (springCloud2025)集成redisCluster 集群的文章就介绍到这了,更多相关springBoot 集成redisCluster 集群内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • PowerJob的OhMyClassLoader工作流程源码解读

    PowerJob的OhMyClassLoader工作流程源码解读

    这篇文章主要介绍了PowerJob的OhMyClassLoader工作流程源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • 使用jvm sandbox对三层嵌套类型的改造示例

    使用jvm sandbox对三层嵌套类型的改造示例

    这篇文章主要为大家介绍了使用jvm sandbox对三层嵌套类型的改造示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • SpringBoot 使用 FTP 操作文件的过程(删除、上传、下载文件)

    SpringBoot 使用 FTP 操作文件的过程(删除、上传、下载文件)

    这篇文章主要介绍了SpringBoot 使用 FTP 操作文件,主要包括配置ftp服务器,上传、删除、下载文件操作,本文结合示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • Java并发容器ConcurrentLinkedQueue解析

    Java并发容器ConcurrentLinkedQueue解析

    这篇文章主要介绍了Java并发容器ConcurrentLinkedQueue解析,
    2023-12-12
  • springmvc限流拦截器的示例代码

    springmvc限流拦截器的示例代码

    本篇文章主要介绍了springmvc限流拦截器的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • 使用Java实现三种等级的扫雷游戏(完整版)

    使用Java实现三种等级的扫雷游戏(完整版)

    扫雷是一款大众类的益智小游戏,根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输,下面这篇文章主要给大家介绍了关于使用Java实现三种等级的扫雷游戏的相关资料,需要的朋友可以参考下
    2023-01-01
  • java类的全限定名是什么

    java类的全限定名是什么

    Java中的全限定名指的是包含包名和类名的完整标识,例如“java.lang.String”,而非限定名仅指类名,如“String”,全限定名用于区分不同包中相同名字的类,避免引用混淆,特别是在有多个包含相同类名的库时
    2024-09-09
  • 使用java执行定时任务示例

    使用java执行定时任务示例

    这篇文章主要介绍了使用java执行定时任务示例,需要的朋友可以参考下
    2014-04-04
  • 详解Java如何简化条件表达式

    详解Java如何简化条件表达式

    在复杂的实际业务中,往往会出现各种嵌套的条件判断逻辑。随着需求的增加,条件逻辑会变得越来越复杂。面对这种情况,简化判断逻辑就是不得不做的事情,下面为大家介绍几种方法
    2022-06-06
  • java字符串遍历的几种常用方法总结

    java字符串遍历的几种常用方法总结

    Java字符串是一系列的Unicode字符序列,但是它却常常被误认为是char序列,这篇文章主要给大家介绍了关于java字符串遍历的几种常用方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-04-04

最新评论