Spring Boot 整合Redisson配置篇
- 《Spring Boot 整合Redisson配置篇》
- 《Spring Boot 整合Redisson操作Redis基礎(chǔ)篇》
- 《Redisson批量操作類RBuckets和管道利器RBatch》
摘要:介紹在Spring Boot 中,如何整合Redisson。
綜述
??Redisson是Redis官方推薦的Java版的Redis客戶端。它提供了使用Redis的最簡單和最便捷的方法。Redisson的宗旨是促進(jìn)使用者對Redis的關(guān)注分離(Separation of Concern),從而讓使用者能夠?qū)⒕Ω械胤旁谔幚順I(yè)務(wù)邏輯上。
??小編在《Spring Boot 整合Jedis連接Redis和簡單使用》中,先介紹如何在Windows系統(tǒng)安裝Redis環(huán)境,然后在Spring Boot 項目中集成 Jedis,最后簡單地做了一個使用Jedis操作redis連接池的測試用例。本文介紹如何在Spring Boot項目中集成Redisson。
引入Maven依賴
Spring Boot版本: 2.5.x。
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.17.1</version>
</dependency>
??集群模式除了適用于Redis集群環(huán)境,也適用于任何云計算服務(wù)商提供的集群模式,例如AWS ElastiCache集群版、Azure Redis Cache和阿里云(Aliyun)的云數(shù)據(jù)庫Redis版。
YAML文件配置集群
??在YAML文件中添加如下集群化配置:
spring:
redis:
cluster:
nodeAddresses: [
"redis://127.0.0.1:7005",
"redis://127.0.0.1:7004",
"redis://127.0.0.1:7003",
"redis://127.0.0.1:7002",
"redis://127.0.0.1:7001",
"redis://127.0.0.1:7000"
]
password: 123456
single:
address: "redis://127.0.0.1:6379"
database: 7
配置參數(shù)讀取類
??先創(chuàng)建一個讀取屬性的類,通過注解@ConfigurationProperties讀取YAML中定義的屬性:
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.io.Serializable;
import java.util.List;
@Data
@Component
@ConfigurationProperties(prefix = "spring.redis")
public class RedisConfigProperties implements Serializable {
private static final long serialVersionUID = 8815222005846355408L;
private String password;
private cluster cluster;
private Single single;
public static class cluster {
private List<String> nodeAddresses;
public List<String> getNodeAddresses() {
return nodeAddresses;
}
public void setNodeAddresses(List<String> nodeAddresses) {
this.nodeAddresses = nodeAddresses;
}
@Override
public String toString() {
return "{" +
"nodeAddresses=" + nodeAddresses +
'}';
}
}
public static class Single {
private String address;
public Integer database;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Integer getDatabase() {
return database;
}
public void setDatabase(Integer database) {
this.database = database;
}
@Override
public String toString() {
return "Single{" +
"address='" + address + '\'' +
", database=" + database +
'}';
}
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public RedisConfigProperties.cluster getCluster() {
return cluster;
}
public void setCluster(RedisConfigProperties.cluster cluster) {
this.cluster = cluster;
}
}
??@ConfigurationProperties(prefix = "spring.redis")用于限制上述配置類只讀取redis屬性。
Redisson 客戶端配置
??所有對Redisson的使用都是通過RedissonClient,調(diào)用如下方法 getRedissonClient() 創(chuàng)建出RedissonClient實例:
import lombok.extern.slf4j.Slf4j;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.client.codec.StringCodec;
import org.redisson.config.ClusterServersConfig;
import org.redisson.config.Config;
import org.redisson.config.SingleServerConfig;
import org.redisson.config.TransportMode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.io.IOException;
import java.util.List;
@Slf4j
@Configuration
public class MyRedissonConfig {
@Autowired(required = false)
private RedisConfigProperties redisConfigProperties;
/**
* 配置redisson集群
* @return
*/
@Bean(destroyMethod = "shutdown")
public RedissonClient getRedissonClient() {
List<String> clusterNodes = redisConfigProperties.getCluster().getNodeAddresses();
log.info("【Redisson 配置】:{}", redisConfigProperties);
Config config = new Config();
//對象編碼選擇純字符串編碼
config.setCodec(StringCodec.INSTANCE);
ClusterServersConfig clusterServersConfig = config.useClusterServers()
.addNodeAddress(clusterNodes.toArray(new String[clusterNodes.size()]));
//設(shè)置密碼
clusterServersConfig.setPassword(redisConfigProperties.getPassword());
//redis連接心跳檢測,防止一段時間過后,與redis的連接斷開
clusterServersConfig.setPingConnectionInterval(32000);
return Redisson.create(config);
}
/**
* 單機配置
* @return
* @throws IOException
*/
/* @Bean(destroyMethod = "shutdown")
RedissonClient singleRedisson() throws IOException {
log.info("【Redisson 配置】:{}", redisConfigProperties);
// 創(chuàng)建配置
Config config = new Config();
config.setCodec(StringCodec.INSTANCE);
config.setTransportMode(TransportMode.NIO);
SingleServerConfig singleServerConfig = config.useSingleServer()
.setAddress(redisConfigProperties.getSingle().getAddress())
.setDatabase(redisConfigProperties.getSingle().getDatabase());
return Redisson.create(config);
}*/
}
??得到redisson對象,之后的分布式鎖由redisson對象操作。節(jié)點地址nodeAddress一般為多個,這些配置信息放在yml中。java bean中已經(jīng)給所有需要配置的屬性寫上了官方默認(rèn)的初始值,你如果不考慮更改默認(rèn)值,實際上只需要在application.properties添加redis連接地址就好:
#redis 單機地址
spring.redisson.address=192.168.1.204:6379
??配置了redisson的信息之后,就可以在項目中使用@Autowired注入org.redisson.api.RedissonClient(redisson提供的默認(rèn)實現(xiàn)類是org.redisson.Redisson,且redisson-spring-boot-starter會自動往IOC容器中注冊org.redisson.Redisson)。啟動項目,在控制臺將打印配置信息:
2022-05-03 10:51:32.102 [main] INFO -c.c.i.m.xxx.MyRedissonConfig - 【Redisson 配置】:RedisConfigProperties(password=123456, cluster={nodeAddresses=[redis://127.0.0.1:7005, redis://127.0.0.1:7004, redis://127.0.0.1:7003, redis://127.0.0.1:7002, redis://127.0.0.1:7001, redis://127.0.0.1:7000]}, single=Single{address='redis://127.0.0.1:6379', database=7})
??由此可見,配置類已經(jīng)成功加載YAML中的配置信息。
知行合一
??整合Redisson后,可用的 Spring Beans包括如下幾個:
- RedissonClient
- RedissonRxClient
- RedissonReactiveClient
- RedisTemplate
- ReactiveRedisTemplate
??下面提供一個使用Bean RedissonClient操作String的示例:
@Autowired
private RedissonClient redissonClient;
private static void demo() {
RBucket<Object> bucket = redissonClient.getBucket("string-demo");
bucket.set("hello");
System.out.println(bucket.get());
}
結(jié)束語
??本文主要為大家介紹了在spring boot中,集成redisson的最佳實踐。有需要的朋友可以拿來即用,希望能夠?qū)Υ蠹矣兴鶐椭?/p>
??“我亦無他,惟手熟爾。”合理利用自己每一分每一秒的時間來學(xué)習(xí)提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!祝各位早日升職加薪!
Reference
Buy me a coffee. ?Get red packets.
浙公網(wǎng)安備 33010602011771號