SpringBoot整合Redisson的兩種方式
項(xiàng)目場(chǎng)景
Spring Boot整合Redisson的兩種方式,方式一直接使用yml配置,方式二創(chuàng)建RedissonConfig配置類(lèi)。
前言
redisson和redis區(qū)別:
- Redis是一個(gè)開(kāi)源的內(nèi)存數(shù)據(jù)庫(kù),支持多種數(shù)據(jù)類(lèi)型,如字符串、哈希、列表、集合和有序集合等,常用于緩存、消息隊(duì)列、計(jì)數(shù)器、分布式鎖和搜索等應(yīng)用場(chǎng)景。
- Redisson則是一個(gè)基于Redis實(shí)現(xiàn)的Java駐內(nèi)存數(shù)據(jù)網(wǎng)格,提供了一系列分布式的Java常用對(duì)象和多種鎖機(jī)制,以及分布式服務(wù),使開(kāi)發(fā)者能更集中于處理業(yè)務(wù)邏輯。
- Redisson不支持字符串操作、排序、事務(wù)、管道、分區(qū)等Redis特性,但Redisson 提供了許多其他功能,如分布式閉鎖、分布式計(jì)數(shù)器、分布式信號(hào)量等。
前提準(zhǔn)備
版本:spring boot2.3.1.RELEASE,redisson3.21.1
maven依賴(lài):
<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.yml
redisson.yml
# 單節(jié)點(diǎn)配置 singleServerConfig: # 數(shù)據(jù)庫(kù)編號(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沒(méi)變
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@pass
Redis集群不支持多個(gè)數(shù)據(jù)庫(kù)的概念,默認(rèn)只有一個(gè)數(shù)據(jù)庫(kù),即db 0,所以這里是沒(méi)有database這個(gè)參數(shù)的。
方式二:創(chuàng)建RedissonConfig配置類(lèi)
配置類(lèi)已經(jīng)兼容單節(jié)點(diǎn)和集群模式,參數(shù)名可以自定義,數(shù)據(jù)庫(kù)默認(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://開(kāi)頭。 # address: redis://localhost:6379,redis://localhost:6378,... # sentinel: # 每個(gè)節(jié)點(diǎn)逗號(hào)分隔,同時(shí)每個(gè)節(jié)點(diǎn)前必須以redis://開(kāi)頭。 # 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://開(kāi)頭。 # address: redis://localhost:6379,redis://localhost:6378,... address: redis://127.0.0.1:6001 # redis 密碼,空可以不填。 password: redis@pass database: 0
RedissonConfig
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配置類(lèi)。 */ @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ù)庫(kù)默認(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ù)庫(kù)概念,默認(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)文章
mybatis3.4.6 批量更新 foreach 遍歷map 的正確姿勢(shì)詳解
這篇文章主要介紹了mybatis3.4.6 批量更新 foreach 遍歷map 的正確姿勢(shì)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11基于SpringBoot和Vue3的博客平臺(tái)文章詳情與評(píng)論功能實(shí)現(xiàn)
在前面的教程中,我們已經(jīng)實(shí)現(xiàn)了基于Spring Boot和Vue3的發(fā)布、編輯、刪除文章功能以及文章列表與分頁(yè)功能。本教程將引導(dǎo)您實(shí)現(xiàn)博客平臺(tái)的文章詳情與評(píng)論功能,需要的朋友可以參考一下2023-04-04淺談java中類(lèi)名.class, class.forName(), getClass()的區(qū)別
下面小編就為大家?guī)?lái)一篇淺談java中類(lèi)名.class, class.forName(), getClass()的區(qū)別。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05SpringBoot使用hutool操作FTP的詳細(xì)過(guò)程
在使用SpringBoot結(jié)合hutool操作FTP時(shí),遇到防火墻導(dǎo)致上傳文件大小為0kb的問(wèn)題,通過(guò)設(shè)置FTP為被動(dòng)模式解決,本文詳細(xì)解析了FTP的主動(dòng)模式和被動(dòng)模式的工作原理、安全性及適用場(chǎng)景,幫助理解FTP的連接方式和解決網(wǎng)絡(luò)限制問(wèn)題2024-09-09