SpringBoot整合Redisson的兩種方式
項(xiàng)目場(chǎng)景
Spring Boot整合Redisson的兩種方式,方式一直接使用yml配置,方式二創(chuàng)建RedissonConfig配置類。
前言
redisson和redis區(qū)別:
- Redis是一個(gè)開源的內(nèi)存數(shù)據(jù)庫,支持多種數(shù)據(jù)類型,如字符串、哈希、列表、集合和有序集合等,常用于緩存、消息隊(duì)列、計(jì)數(shù)器、分布式鎖和搜索等應(yīng)用場(chǎng)景。
- Redisson則是一個(gè)基于Redis實(shí)現(xiàn)的Java駐內(nèi)存數(shù)據(jù)網(wǎng)格,提供了一系列分布式的Java常用對(duì)象和多種鎖機(jī)制,以及分布式服務(wù),使開發(fā)者能更集中于處理業(yè)務(wù)邏輯。
- Redisson不支持字符串操作、排序、事務(wù)、管道、分區(qū)等Redis特性,但Redisson 提供了許多其他功能,如分布式閉鎖、分布式計(jì)數(shù)器、分布式信號(hào)量等。
前提準(zhǔn)備
版本:spring boot2.3.1.RELEASE,redisson3.21.1
maven依賴:
<dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-boot-starter</artifactId> <version>3.21.1</version> </dependency>
集成方案:
方式一:使用yml配置
1.單節(jié)點(diǎn)配置
單節(jié)點(diǎn)配置可以兼容redis的配置方式
application.yml
# redis配置
spring:
redis:
database: 0
host: 127.0.0.1
password: redis@pass
port: 6001或者使用 redisson.yml文件的方式
application.yml這里引用了redisson.yml文件
spring:
redis:
# redisson配置
redisson:
file: classpath:redisson.ymlredisson.yml
# 單節(jié)點(diǎn)配置 singleServerConfig: # 數(shù)據(jù)庫編號(hào) database: 0 # 節(jié)點(diǎn)地址 address: redis://127.0.0.1:6001 # 密碼 password: redis@pass
application.yml與 redisson.yml在同級(jí),目錄結(jié)構(gòu)如下:

2.集群模式配置
集群模式不能兼容redis之前的配置方式
application.yml沒變
spring:
redis:
# redisson配置
redisson:
file: classpath:redisson.yml更改redisson.yml內(nèi)容
# 集群模式
clusterServersConfig:
# 集群節(jié)點(diǎn)地址
nodeAddresses:
- "redis://127.0.0.1:18001"
- "redis://127.0.0.1:18002"
- "redis://127.0.0.1:18003"
- "redis://127.0.0.1:18004"
- "redis://127.0.0.1:18005"
- "redis://127.0.0.1:18006"
# 密碼
password: redis@passRedis集群不支持多個(gè)數(shù)據(jù)庫的概念,默認(rèn)只有一個(gè)數(shù)據(jù)庫,即db 0,所以這里是沒有database這個(gè)參數(shù)的。
方式二:創(chuàng)建RedissonConfig配置類
配置類已經(jīng)兼容單節(jié)點(diǎn)和集群模式,參數(shù)名可以自定義,數(shù)據(jù)庫默認(rèn)使用db 0。
application.yml
spring:
redis:
# redisson配置
redisson:
# 如果該值為false,系統(tǒng)將不會(huì)創(chuàng)建RedissionClient的bean。
enabled: true
# mode的可用值為,single/cluster/sentinel/master-slave
mode: single
# single: 單機(jī)模式
# address: redis://localhost:6379
# cluster: 集群模式
# 每個(gè)節(jié)點(diǎn)逗號(hào)分隔,同時(shí)每個(gè)節(jié)點(diǎn)前必須以redis://開頭。
# address: redis://localhost:6379,redis://localhost:6378,...
# sentinel:
# 每個(gè)節(jié)點(diǎn)逗號(hào)分隔,同時(shí)每個(gè)節(jié)點(diǎn)前必須以redis://開頭。
# address: redis://localhost:6379,redis://localhost:6378,...
# master-slave:
# 每個(gè)節(jié)點(diǎn)逗號(hào)分隔,第一個(gè)為主節(jié)點(diǎn),其余為從節(jié)點(diǎn)。同時(shí)每個(gè)節(jié)點(diǎn)前必須以redis://開頭。
# address: redis://localhost:6379,redis://localhost:6378,...
address: redis://127.0.0.1:6001
# redis 密碼,空可以不填。
password: redis@pass
database: 0RedissonConfig
import org.apache.commons.lang3.StringUtils;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Redisson配置類。
*/
@Configuration
@ConditionalOnProperty(name = "spring.redis.redisson.enabled", havingValue = "true")
public class RedissonConfig {
@Value("${spring.redis.redisson.mode}")
private String mode;
/**
* 僅僅用于sentinel模式。
*/
@Value("${spring.redis.redisson.masterName:}")
private String masterName;
@Value("${spring.redis.redisson.address}")
private String address;
@Value("${spring.redis.redisson.password:}")
private String password;
/**
* 數(shù)據(jù)庫默認(rèn)0
*/
@Value("${spring.redis.redisson.database:0}")
private Integer database;
@Bean
public RedissonClient redissonClient() {
if (StringUtils.isBlank(password)) {
password = null;
}
Config config = new Config();
if ("single".equals(mode)) {
config.useSingleServer()
.setDatabase(database)
.setPassword(password)
.setAddress(address);
} else if ("cluster".equals(mode)) {
String[] clusterAddresses = address.split(",");
config.useClusterServers()
//集群模式不支持多個(gè)數(shù)據(jù)庫概念,默認(rèn)db 0
.setPassword(password)
.addNodeAddress(clusterAddresses);
} else if ("sentinel".equals(mode)) {
String[] sentinelAddresses = address.split(",");
config.useSentinelServers()
.setDatabase(database)
.setPassword(password)
.setMasterName(masterName)
.addSentinelAddress(sentinelAddresses);
} else if ("master-slave".equals(mode)) {
String[] masterSlaveAddresses = address.split(",");
if (masterSlaveAddresses.length == 1) {
throw new IllegalArgumentException(
"redis.redisson.address MUST have multiple redis addresses for master-slave mode.");
}
String[] slaveAddresses = new String[masterSlaveAddresses.length - 1];
System.arraycopy(masterSlaveAddresses, 1, slaveAddresses, 0, slaveAddresses.length);
config.useMasterSlaveServers()
.setDatabase(database)
.setPassword(password)
.setMasterAddress(masterSlaveAddresses[0])
.addSlaveAddress(slaveAddresses);
} else {
throw new IllegalArgumentException(mode);
}
return Redisson.create(config);
}
}以上就是SpringBoot整合Redisson的兩種方式的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot整合Redisson的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java通過Process類Runtime.getRuntime().exec()執(zhí)行bat腳本程序
用Java編寫應(yīng)用時(shí),有時(shí)需要在程序中調(diào)用另一個(gè)現(xiàn)成的可執(zhí)行程序或系統(tǒng)命令,這篇文章主要給大家介紹了關(guān)于Java如何通過Process類Runtime.getRuntime().exec()執(zhí)行bat腳本程序的相關(guān)資料,需要的朋友可以參考下2024-01-01

