redisson配置類---SpringBoot集成、redis單機和集群模式配置

1項目配置文件:

1.1:pom.xml

        <dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.17.7</version></dependency> 

1.2 application.yml配置文件

spring:redis:cluster:nodes:- ip:port- ip:port- ip:port- ip:port- ip:port- ip:port# 密碼password: *******# 連接超時時間timeout: 10s# 是否開啟sslssl: false
redisson:
# 線程池數量threads: 8
# Netty線程池數量nettyThreads: 16
# 集群配置clusterServersConfig:# 客戶端名稱clientName: redisClient# master最小空閑連接數masterConnectionMinimumIdleSize: 16# master連接池大小masterConnectionPoolSize: 32# slave最小空閑連接數slaveConnectionMinimumIdleSize: 16# slave連接池大小slaveConnectionPoolSize: 64# 連接空閑超時,單位:毫秒idleConnectionTimeout: 10000# 命令等待超時,單位:毫秒timeout: 3000# 發布和訂閱連接池大小subscriptionConnectionPoolSize: 50# 讀取模式readMode: "SLAVE"# 訂閱模式subscriptionMode: "MASTER"cacheGroup:# 用例: @Cacheable(cacheNames="groupId", key="#XXX") 方可使用緩存組配置- groupId: redissonCacheMap# 組過期時間(腳本監控)ttl: 60000# 組最大空閑時間(腳本監控)maxIdleTime: 60000# 組最大長度maxSize: 0

配置類

2-1配置屬性類:RedissonProperties.java

import lombok.Data;
import lombok.NoArgsConstructor;
import org.redisson.config.ReadMode;
import org.redisson.config.SubscriptionMode;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;import java.util.List;/*** Redisson 配置屬性* @author zengshichang*/
@Data
@Component
@ConfigurationProperties(prefix = "redisson")
public class RedissonProperties {/*** 線程池數量,默認值 = 當前處理核數量 * 2*/private int threads;/*** Netty線程池數量,默認值 = 當前處理核數量 * 2*/private int nettyThreads;/*** 單機服務配置*/private SingleServerConfig singleServerConfig;/*** 集群服務配置*/private ClusterServersConfig clusterServersConfig;/*** 緩存組*/private List<CacheGroup> cacheGroup;@Data@NoArgsConstructorpublic static class SingleServerConfig {/*** 客戶端名稱*/private String clientName;/*** 最小空閑連接數*/private int connectionMinimumIdleSize;/*** 連接池大小*/private int connectionPoolSize;/*** 連接空閑超時,單位:毫秒*/private int idleConnectionTimeout;/*** 命令等待超時,單位:毫秒*/private int timeout;/*** 發布和訂閱連接池大小*/private int subscriptionConnectionPoolSize;}@Data@NoArgsConstructorpublic static class ClusterServersConfig {/*** 客戶端名稱*/private String clientName;/*** master最小空閑連接數*/private int masterConnectionMinimumIdleSize;/*** master連接池大小*/private int masterConnectionPoolSize;/*** slave最小空閑連接數*/private int slaveConnectionMinimumIdleSize;/*** slave連接池大小*/private int slaveConnectionPoolSize;/*** 連接空閑超時,單位:毫秒*/private int idleConnectionTimeout;/*** 命令等待超時,單位:毫秒*/private int timeout;/*** 發布和訂閱連接池大小*/private int subscriptionConnectionPoolSize;/*** 讀取模式*/private ReadMode readMode;/*** 訂閱模式*/private SubscriptionMode subscriptionMode;}@Data@NoArgsConstructorpublic static class CacheGroup {/*** 組id*/private String groupId;/*** 組過期時間*/private long ttl;/*** 組最大空閑時間*/private long maxIdleTime;/*** 組最大長度*/private int maxSize;}
}

2-2redis配置:RedisConfig.java

import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RedissonClient;
import org.redisson.client.codec.StringCodec;
import org.redisson.codec.JsonJacksonCodec;
import org.redisson.spring.cache.CacheConfig;
import org.redisson.spring.cache.RedissonSpringCacheManager;
import org.redisson.spring.starter.RedissonAutoConfigurationCustomizer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import cn.hutool.core.util.ObjectUtil;import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** redis配置* @author zengshichang*/
@Slf4j
@Configuration
@EnableCaching
@EnableConfigurationProperties(RedissonProperties.class)
public class RedisConfig extends CachingConfigurerSupport {@Autowiredprivate RedissonProperties redissonProperties;@Autowiredprivate ObjectMapper objectMapper;@Beanpublic RedissonAutoConfigurationCustomizer redissonCustomizer() {return config -> {config.setThreads(redissonProperties.getThreads()).setNettyThreads(redissonProperties.getNettyThreads()).setCodec(new StringCodec());RedissonProperties.SingleServerConfig singleServerConfig = redissonProperties.getSingleServerConfig();if (ObjectUtil.isNotNull(singleServerConfig)) {// 使用單機模式config.useSingleServer().setTimeout(singleServerConfig.getTimeout()).setClientName(singleServerConfig.getClientName()).setIdleConnectionTimeout(singleServerConfig.getIdleConnectionTimeout()).setSubscriptionConnectionPoolSize(singleServerConfig.getSubscriptionConnectionPoolSize()).setConnectionMinimumIdleSize(singleServerConfig.getConnectionMinimumIdleSize()).setConnectionPoolSize(singleServerConfig.getConnectionPoolSize());}// 集群配置方式 參考下方注釋RedissonProperties.ClusterServersConfig clusterServersConfig = redissonProperties.getClusterServersConfig();if (ObjectUtil.isNotNull(clusterServersConfig)) {config.useClusterServers().setTimeout(clusterServersConfig.getTimeout()).setClientName(clusterServersConfig.getClientName()).setIdleConnectionTimeout(clusterServersConfig.getIdleConnectionTimeout()).setSubscriptionConnectionPoolSize(clusterServersConfig.getSubscriptionConnectionPoolSize()).setMasterConnectionMinimumIdleSize(clusterServersConfig.getMasterConnectionMinimumIdleSize()).setMasterConnectionPoolSize(clusterServersConfig.getMasterConnectionPoolSize()).setSlaveConnectionMinimumIdleSize(clusterServersConfig.getSlaveConnectionMinimumIdleSize()).setSlaveConnectionPoolSize(clusterServersConfig.getSlaveConnectionPoolSize()).setReadMode(clusterServersConfig.getReadMode()).setSubscriptionMode(clusterServersConfig.getSubscriptionMode());}log.info("初始化 redis 配置");};}/*** 整合spring-cache*/@Beanpublic CacheManager cacheManager(RedissonClient redissonClient) {List<RedissonProperties.CacheGroup> cacheGroup = redissonProperties.getCacheGroup();Map<String, CacheConfig> config = new HashMap<>(16);for (RedissonProperties.CacheGroup group : cacheGroup) {CacheConfig cacheConfig = new CacheConfig(group.getTtl(), group.getMaxIdleTime());cacheConfig.setMaxSize(group.getMaxSize());config.put(group.getGroupId(), cacheConfig);}return new RedissonSpringCacheManager(redissonClient, config, new JsonJacksonCodec(objectMapper));}
}

注:EnableConfigurationPropertiess用法:

@EnableConfigurationProperties(RedissonProperties.class)是一個注解,用于啟用將指定的配置類作為配置屬性進行自動配置。在Spring Boot應用程序中,通常使用@EnableConfigurationProperties注解來啟用將配置屬性綁定到特定的配置類。在這種情況下,RedissonProperties是用于綁定與Redisson相關的配置屬性的配置類。通過使用@EnableConfigurationProperties(RedissonProperties.class)注解,可以實現以下幾點:將RedissonProperties類作為配置屬性類進行注冊和加載。
自動將應用程序配置文件中與RedissonProperties相關的屬性值與RedissonProperties類中的字段進行綁定。
可以通過在代碼中注入RedissonProperties類的實例來獲得配置的屬性值,從而在應用程序中使用這些屬性值。
這樣,通過@EnableConfigurationProperties(RedissonProperties.class)注解,Redisson的配置屬性就會被正確地加載和綁定,并能夠在應用程序中使用這些配置。

2.3:Redisson使用

@RequiredArgsConstructor
@Service
@Slf4j
@RefreshScope
public class ServiceImpl implements IService {@Autowiredprivate RedisDao redisDao;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/37064.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/37064.shtml
英文地址,請注明出處:http://en.pswp.cn/news/37064.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深度學習筆記(kaggle課程《Intro to Deep Learning》)

一、什么是深度學習&#xff1f; 深度學習是一種機器學習方法&#xff0c;通過構建和訓練深層神經網絡來處理和理解數據。它模仿人腦神經系統的工作方式&#xff0c;通過多層次的神經網絡結構來學習和提取數據的特征。深度學習在圖像識別、語音識別、自然語言處理等領域取得了…

Opencv將數據保存到xml、yaml / 從xml、yaml讀取數據

Opencv將數據保存到xml、yaml / 從xml、yaml讀取數據 Opencv提供了讀寫xml、yaml的類實現&#xff1a; 本文重點參考&#xff1a;https://blog.csdn.net/cd_yourheart/article/details/122705776?spm1001.2014.3001.5506&#xff0c;并將給出文件讀寫的具體使用實例。 1. 官…

C++多線程場景中的變量提前釋放導致棧內存異常

多線程場景中的棧內存異常 在子線程中嘗試使用當前函數的資源&#xff0c;是非常危險的&#xff0c;但是C支持這么做。因此C這么做可能會造成棧內存異常。 正常代碼 #include <iostream> #include <thread> #include <windows.h>// 線程函數&#xff0c;用…

Fast-Newman算法和louvain算法

fast-newman算法 fast-newman算法是一種用于社區發現的算法。它是基于newman算法的改進版本&#xff0c;旨在提高算法的運行速度和效率。fast-newman算法通過將網絡劃分為多個子圖&#xff0c;并在每個子圖上進行社區劃分&#xff0c;然后再將子圖合并&#xff0c;最終得到整個…

【分布式存儲】數據存儲和檢索~LSM

在數據庫領域&#xff0c;B樹擁有無可撼動的地位&#xff0c;但是B樹的缺點就是在寫多讀少的場景下&#xff0c;需要進行大量隨機的磁盤IO讀寫&#xff0c;而這個性能是最差的。并且在刪除和添加數據的時候&#xff0c;會造成整個樹進行遞歸的合并、分裂&#xff0c;數據在磁盤…

【JVM】類裝載的執行過程

文章目錄 類裝載的執行過程1.加載2.驗證3.準備4.解析5.初始化6.使用7.卸載 類裝載的執行過程 類裝載總共分為7個過程&#xff0c;分別是 加載&#xff0c;驗證&#xff0c;準備、解析、初始化、使用、卸載 1.加載 將類的字節碼文件加載到內存(元空間&#xff09;中。這一步會…

16.3.1 【Linux】程序的觀察

既然程序這么重要&#xff0c;那么我們如何查閱系統上面正在運行當中的程序呢&#xff1f;利用靜態的 ps 或者是動態的 top&#xff0c;還能以 pstree 來查閱程序樹之間的關系。 ps &#xff1a;將某個時間點的程序運行情況擷取下來 僅觀察自己的 bash 相關程序&#xff1a; p…

Keburnetes 存儲卷 volumes

K8S 的 存儲卷 volumes emptyDir 可實現Pod中的容器之間共享目錄數據&#xff0c;但emptyDir存儲卷沒有持久化數據的能力&#xff0c;存儲卷會隨著Pod生命周期結束而一起刪除 &#xff08;一個pod中創建了docker1 docker2兩個容器&#xff0c;他們都掛載這個emptyDir&#xff0…

Gradle依賴管理:編譯時和運行時依賴的區別

&#x1f337;&#x1f341; 博主貓頭虎 帶您 Go to New World.?&#x1f341; &#x1f984; 博客首頁——貓頭虎的博客&#x1f390; &#x1f433;《面試題大全專欄》 文章圖文并茂&#x1f995;生動形象&#x1f996;簡單易學&#xff01;歡迎大家來踩踩~&#x1f33a; &a…

【LeetCode】《LeetCode 101》第十一章:妙用數據結構

文章目錄 11.1 C STL11.2 數組448. 找到所有數組中消失的數字&#xff08;簡單&#xff09;48. 旋轉圖像&#xff08;中等&#xff09;74. 搜索二維矩陣&#xff08;中等&#xff09;240. 搜索二維矩陣 II&#xff08;中等&#xff09;769. 最多能完成排序的塊&#xff08;中等…

java重寫與重載的區別

在Java中&#xff0c;重寫&#xff08;Override&#xff09;和重載&#xff08;Overload&#xff09;是兩種不同的概念&#xff1a; 重寫&#xff08;Override&#xff09;&#xff1a; 重寫是指子類重新定義&#xff08;覆蓋&#xff09;了從父類繼承而來的方法。重寫要求子類…

ROSpider機器人評測報告

ROSpider機器人評測報告 最近入手了一款ROSpider六足仿生機器人&#xff0c;ROSpider是一款基于ROS 操作系統開發的智能視覺六足機器人。 外觀 外觀上ROSpider六足機器人如同名字一樣有六只機械腿&#xff0c;整體來看像一只六腿的蜘蛛。腿上的關節處用了明亮的橙黃色很是顯…

Redis實現消息的發布和訂閱

Redis實現消息的發布和訂閱 1、在springboot項目的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:schem…

cookie和session的區別,分布式環境怎么保存用戶狀態

1、cookie數據存放在客戶的瀏覽器上&#xff0c;session數據放在服務器上。 2、cookie不是很安全&#xff0c;別人可以分析存放在本地的COOKIE并進行COOKIE欺騙&#xff0c;考慮到安全應當使用session。 3、session會在一定時間內保存在服務器上。當訪問增多&#xff0c;會比…

js和cocos creator學習筆記

1.Javascript有哪些數據類型?舉例兩個最常見的內置對象數據類型? 常用的數據類型:Number,String,Boolean,Null,Undefined,Object 常見內置對象:Array,Function2.下面代碼輸出內容是什么? let a []; a[10] 10; console.log(a.length); console.log(a[0]); a[200] undefi…

arcpy創建基本要素:折線和多邊形

目錄 創建Polyline折線要素步驟一&#xff1a;創建空間參考步驟二&#xff1a;創建屬性類步驟三&#xff1a;創建字段步驟四&#xff1a;創建記錄并插入幾何信息 創建Polygon多邊形要素步驟一&#xff1a;創建空間參考&#xff08;同上&#xff09;步驟二&#xff1a;創建要素類…

Redis使用Lua腳本和Redisson來保證庫存扣減中的原子性和一致性

文章目錄 前言1.使用SpringBoot Redis 原生實現方式2.使用redisson方式實現3. 使用RedisLua腳本實現3.1 lua腳本代碼邏輯 3.2 與SpringBoot集成 4. Lua腳本方式和Redisson的方式對比5. 源碼地址6. Redis從入門到精通系列文章7. 參考文檔 前言 背景&#xff1a;最近有社群技術交…

C++——函數重載及底層原理

函數重載的定義 函數重載&#xff1a; 是函數的一種特殊情況&#xff0c;C允許在同一作用域重聲明幾個功能類似的同名函數&#xff0c;這些同名函數的形參列表&#xff08;參數個數或者類型&#xff0c;類型的順序&#xff09;不同&#xff0c;常用來處理實現功能類似數據結構…

C語言字符串拷貝函數詳解及示例代碼

目錄 簡介字符串拷貝函數 strcpy字符串拷貝函數 strcpy_s使用示例注意事項結束語 1. 簡介 字符串拷貝是C語言中常用的操作之一。當需要將一個字符串復制到另一個字符串數組中時&#xff0c;可以使用字符串拷貝函數來實現。C語言提供了多種字符串拷貝函數&#xff0c;其中最常…

春秋云鏡 CVE-2021-41947

春秋云鏡 CVE-2021-41947 Subrion CMS v4.2.1 存在sql注入 靶標介紹 Subrion CMS v4.2.1 存在sql注入。 啟動場景 漏洞利用 exp http://localhost/panel/visual-mode.json?getaccess&typeblocks UNION ALL SELECT username, password FROM sbr421_members -- -&o…