SpringBoot整合Redisson的兩種方式
項目場景
Spring Boot整合Redisson的兩種方式,方式一直接使用yml配置,方式二創(chuàng)建RedissonConfig配置類。
前言
redisson和redis區(qū)別:
- Redis是一個開源的內(nèi)存數(shù)據(jù)庫,支持多種數(shù)據(jù)類型,如字符串、哈希、列表、集合和有序集合等,常用于緩存、消息隊列、計數(shù)器、分布式鎖和搜索等應(yīng)用場景。
- Redisson則是一個基于Redis實現(xiàn)的Java駐內(nèi)存數(shù)據(jù)網(wǎng)格,提供了一系列分布式的Java常用對象和多種鎖機制,以及分布式服務(wù),使開發(fā)者能更集中于處理業(yè)務(wù)邏輯。
- Redisson不支持字符串操作、排序、事務(wù)、管道、分區(qū)等Redis特性,但Redisson 提供了許多其他功能,如分布式閉鎖、分布式計數(shù)器、分布式信號量等。
前提準(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é)點配置
單節(jié)點配置可以兼容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é)點配置 singleServerConfig: # 數(shù)據(jù)庫編號 database: 0 # 節(jié)點地址 address: redis://127.0.0.1:6001 # 密碼 password: redis@pass
application.yml與 redisson.yml在同級,目錄結(jié)構(gòu)如下:

2.集群模式配置
集群模式不能兼容redis之前的配置方式
application.yml沒變
spring:
redis:
# redisson配置
redisson:
file: classpath:redisson.yml更改redisson.yml內(nèi)容
# 集群模式
clusterServersConfig:
# 集群節(jié)點地址
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集群不支持多個數(shù)據(jù)庫的概念,默認(rèn)只有一個數(shù)據(jù)庫,即db 0,所以這里是沒有database這個參數(shù)的。
方式二:創(chuàng)建RedissonConfig配置類
配置類已經(jīng)兼容單節(jié)點和集群模式,參數(shù)名可以自定義,數(shù)據(jù)庫默認(rèn)使用db 0。
application.yml
spring:
redis:
# redisson配置
redisson:
# 如果該值為false,系統(tǒng)將不會創(chuàng)建RedissionClient的bean。
enabled: true
# mode的可用值為,single/cluster/sentinel/master-slave
mode: single
# single: 單機模式
# address: redis://localhost:6379
# cluster: 集群模式
# 每個節(jié)點逗號分隔,同時每個節(jié)點前必須以redis://開頭。
# address: redis://localhost:6379,redis://localhost:6378,...
# sentinel:
# 每個節(jié)點逗號分隔,同時每個節(jié)點前必須以redis://開頭。
# address: redis://localhost:6379,redis://localhost:6378,...
# master-slave:
# 每個節(jié)點逗號分隔,第一個為主節(jié)點,其余為從節(jié)點。同時每個節(jié)點前必須以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()
//集群模式不支持多個數(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的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
mybatis3.4.6 批量更新 foreach 遍歷map 的正確姿勢詳解
這篇文章主要介紹了mybatis3.4.6 批量更新 foreach 遍歷map 的正確姿勢詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11
基于SpringBoot和Vue3的博客平臺文章詳情與評論功能實現(xiàn)
在前面的教程中,我們已經(jīng)實現(xiàn)了基于Spring Boot和Vue3的發(fā)布、編輯、刪除文章功能以及文章列表與分頁功能。本教程將引導(dǎo)您實現(xiàn)博客平臺的文章詳情與評論功能,需要的朋友可以參考一下2023-04-04
淺談java中類名.class, class.forName(), getClass()的區(qū)別
下面小編就為大家?guī)硪黄獪\談java中類名.class, class.forName(), getClass()的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05
SpringBoot使用hutool操作FTP的詳細(xì)過程
在使用SpringBoot結(jié)合hutool操作FTP時,遇到防火墻導(dǎo)致上傳文件大小為0kb的問題,通過設(shè)置FTP為被動模式解決,本文詳細(xì)解析了FTP的主動模式和被動模式的工作原理、安全性及適用場景,幫助理解FTP的連接方式和解決網(wǎng)絡(luò)限制問題2024-09-09

