在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: debugcluster配置类
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 集群内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论