From 99c4692a0de9fd96d93dcf5fce4a13e7bb686523 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子li <15040126243@163.com>
Date: 星期一, 31 五月 2021 23:21:14 +0800
Subject: [PATCH] update 升级 luttuce 为 redisson 性能更强 工具更全
---
ruoyi-admin/src/main/resources/application-prod.yml | 45 ++
ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java | 75 ++++--
ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/RedissonProperties.java | 101 ++++++++
ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java | 397 +++++++++++++++-----------------
pom.xml | 8
ruoyi-common/pom.xml | 6
ruoyi-admin/src/main/resources/application-dev.yml | 45 ++
7 files changed, 427 insertions(+), 250 deletions(-)
diff --git a/pom.xml b/pom.xml
index 6d52bf6..6cbda80 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,6 +31,7 @@
<feign.version>2.2.6.RELEASE</feign.version>
<feign-okhttp.version>11.0</feign-okhttp.version>
<spring-boot-admin.version>2.3.1</spring-boot-admin.version>
+ <redisson.version>3.15.2</redisson.version>
</properties>
<!-- 渚濊禆澹版槑 -->
@@ -180,6 +181,13 @@
<version>${ruoyi-vue-plus.version}</version>
</dependency>
+ <!--redisson-->
+ <dependency>
+ <groupId>org.redisson</groupId>
+ <artifactId>redisson-spring-boot-starter</artifactId>
+ <version>${redisson.version}</version>
+ </dependency>
+
</dependencies>
</dependencyManagement>
diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml
index 06456dd..71e5b6f 100644
--- a/ruoyi-admin/src/main/resources/application-dev.yml
+++ b/ruoyi-admin/src/main/resources/application-dev.yml
@@ -67,13 +67,38 @@
password:
# 杩炴帴瓒呮椂鏃堕棿
timeout: 10s
- lettuce:
- pool:
- # 杩炴帴姹犱腑鐨勬渶灏忕┖闂茶繛鎺�
- min-idle: 0
- # 杩炴帴姹犱腑鐨勬渶澶х┖闂茶繛鎺�
- max-idle: 8
- # 杩炴帴姹犵殑鏈�澶ф暟鎹簱杩炴帴鏁�
- max-active: 8
- # #杩炴帴姹犳渶澶ч樆濉炵瓑寰呮椂闂达紙浣跨敤璐熷�艰〃绀烘病鏈夐檺鍒讹級
- max-wait: -1ms
+ # 鏄惁寮�鍚痵sl
+ ssl: false
+
+--- # redisson 瀹㈡埛绔厤缃�
+redisson:
+ # 绾跨▼姹犳暟閲�
+ threads: 16
+ # Netty绾跨▼姹犳暟閲�
+ nettyThreads: 32
+ # 浼犺緭妯″紡
+ transportMode: "NIO"
+ # 鍗曡妭鐐归厤缃�
+ singleServerConfig:
+ # 瀹㈡埛绔悕绉�
+ clientName: ${ruoyi-vue-plus.name}
+ # 鏈�灏忕┖闂茶繛鎺ユ暟
+ connectionMinimumIdleSize: 32
+ # 杩炴帴姹犲ぇ灏�
+ connectionPoolSize: 64
+ # 杩炴帴绌洪棽瓒呮椂锛屽崟浣嶏細姣
+ idleConnectionTimeout: 10000
+ # 鍛戒护绛夊緟瓒呮椂锛屽崟浣嶏細姣
+ timeout: 3000
+ # 濡傛灉灏濊瘯鍦ㄦ闄愬埗涔嬪唴鍙戦�佹垚鍔燂紝鍒欏紑濮嬪惎鐢� timeout 璁℃椂銆�
+ retryAttempts: 3
+ # 鍛戒护閲嶈瘯鍙戦�佹椂闂撮棿闅旓紝鍗曚綅锛氭绉�
+ retryInterval: 1500
+ # 鍙戝竷鍜岃闃呰繛鎺ョ殑鏈�灏忕┖闂茶繛鎺ユ暟
+ subscriptionConnectionMinimumIdleSize: 1
+ # 鍙戝竷鍜岃闃呰繛鎺ユ睜澶у皬
+ subscriptionConnectionPoolSize: 50
+ # 鍗曚釜杩炴帴鏈�澶ц闃呮暟閲�
+ subscriptionsPerConnection: 5
+ # DNS鐩戞祴鏃堕棿闂撮殧锛屽崟浣嶏細姣
+ dnsMonitoringInterval: 5000
diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml
index fbd01b3..eba8a89 100644
--- a/ruoyi-admin/src/main/resources/application-prod.yml
+++ b/ruoyi-admin/src/main/resources/application-prod.yml
@@ -67,13 +67,38 @@
password:
# 杩炴帴瓒呮椂鏃堕棿
timeout: 10s
- lettuce:
- pool:
- # 杩炴帴姹犱腑鐨勬渶灏忕┖闂茶繛鎺�
- min-idle: 0
- # 杩炴帴姹犱腑鐨勬渶澶х┖闂茶繛鎺�
- max-idle: 8
- # 杩炴帴姹犵殑鏈�澶ф暟鎹簱杩炴帴鏁�
- max-active: 8
- # #杩炴帴姹犳渶澶ч樆濉炵瓑寰呮椂闂达紙浣跨敤璐熷�艰〃绀烘病鏈夐檺鍒讹級
- max-wait: -1ms
\ No newline at end of file
+ # 鏄惁寮�鍚痵sl
+ ssl: false
+
+--- # redisson 瀹㈡埛绔厤缃�
+redisson:
+ # 绾跨▼姹犳暟閲�
+ threads: 16
+ # Netty绾跨▼姹犳暟閲�
+ nettyThreads: 32
+ # 浼犺緭妯″紡
+ transportMode: "NIO"
+ # 鍗曡妭鐐归厤缃�
+ singleServerConfig:
+ # 瀹㈡埛绔悕绉�
+ clientName: ${ruoyi-vue-plus.name}
+ # 鏈�灏忕┖闂茶繛鎺ユ暟
+ connectionMinimumIdleSize: 32
+ # 杩炴帴姹犲ぇ灏�
+ connectionPoolSize: 64
+ # 杩炴帴绌洪棽瓒呮椂锛屽崟浣嶏細姣
+ idleConnectionTimeout: 10000
+ # 鍛戒护绛夊緟瓒呮椂锛屽崟浣嶏細姣
+ timeout: 3000
+ # 濡傛灉灏濊瘯鍦ㄦ闄愬埗涔嬪唴鍙戦�佹垚鍔燂紝鍒欏紑濮嬪惎鐢� timeout 璁℃椂銆�
+ retryAttempts: 3
+ # 鍛戒护閲嶈瘯鍙戦�佹椂闂撮棿闅旓紝鍗曚綅锛氭绉�
+ retryInterval: 1500
+ # 鍙戝竷鍜岃闃呰繛鎺ョ殑鏈�灏忕┖闂茶繛鎺ユ暟
+ subscriptionConnectionMinimumIdleSize: 1
+ # 鍙戝竷鍜岃闃呰繛鎺ユ睜澶у皬
+ subscriptionConnectionPoolSize: 50
+ # 鍗曚釜杩炴帴鏈�澶ц闃呮暟閲�
+ subscriptionsPerConnection: 5
+ # DNS鐩戞祴鏃堕棿闂撮殧锛屽崟浣嶏細姣
+ dnsMonitoringInterval: 5000
diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
index 5f1404e..2c75fcd 100644
--- a/ruoyi-common/pom.xml
+++ b/ruoyi-common/pom.xml
@@ -151,6 +151,12 @@
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
+ <!--redisson-->
+ <dependency>
+ <groupId>org.redisson</groupId>
+ <artifactId>redisson-spring-boot-starter</artifactId>
+ </dependency>
+
</dependencies>
</project>
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java
index 22a610d..6c4c239 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java
@@ -1,234 +1,219 @@
package com.ruoyi.common.core.redis;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
+import com.google.common.collect.Lists;
+import org.redisson.api.*;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.core.BoundSetOperations;
-import org.springframework.data.redis.core.HashOperations;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component;
+
+import java.util.*;
+import java.util.concurrent.TimeUnit;
/**
* spring redis 宸ュ叿绫�
*
- * @author ruoyi
+ * @author shenxinquan
**/
-@SuppressWarnings(value = { "unchecked", "rawtypes" })
+@SuppressWarnings(value = {"unchecked", "rawtypes"})
@Component
-public class RedisCache
-{
- @Autowired
- public RedisTemplate redisTemplate;
+public class RedisCache {
- /**
- * 缂撳瓨鍩烘湰鐨勫璞★紝Integer銆丼tring銆佸疄浣撶被绛�
- *
- * @param key 缂撳瓨鐨勯敭鍊�
- * @param value 缂撳瓨鐨勫��
- */
- public <T> void setCacheObject(final String key, final T value)
- {
- redisTemplate.opsForValue().set(key, value);
- }
+ @Autowired
+ private RedissonClient redissonClient;
- /**
- * 缂撳瓨鍩烘湰鐨勫璞★紝Integer銆丼tring銆佸疄浣撶被绛�
- *
- * @param key 缂撳瓨鐨勯敭鍊�
- * @param value 缂撳瓨鐨勫��
- * @param timeout 鏃堕棿
- * @param timeUnit 鏃堕棿棰楃矑搴�
- */
- public <T> void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit)
- {
- redisTemplate.opsForValue().set(key, value, timeout, timeUnit);
- }
+ /**
+ * 缂撳瓨鍩烘湰鐨勫璞★紝Integer銆丼tring銆佸疄浣撶被绛�
+ *
+ * @param key 缂撳瓨鐨勯敭鍊�
+ * @param value 缂撳瓨鐨勫��
+ */
+ public <T> void setCacheObject(final String key, final T value) {
+ redissonClient.getBucket(key).set(value);
+ }
- /**
- * 璁剧疆鏈夋晥鏃堕棿
- *
- * @param key Redis閿�
- * @param timeout 瓒呮椂鏃堕棿
- * @return true=璁剧疆鎴愬姛锛沠alse=璁剧疆澶辫触
- */
- public boolean expire(final String key, final long timeout)
- {
- return expire(key, timeout, TimeUnit.SECONDS);
- }
+ /**
+ * 缂撳瓨鍩烘湰鐨勫璞★紝Integer銆丼tring銆佸疄浣撶被绛�
+ *
+ * @param key 缂撳瓨鐨勯敭鍊�
+ * @param value 缂撳瓨鐨勫��
+ * @param timeout 鏃堕棿
+ * @param timeUnit 鏃堕棿棰楃矑搴�
+ */
+ public <T> void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit) {
+ RBucket<T> result = redissonClient.getBucket(key);
+ result.set(value);
+ result.expire(timeout, timeUnit);
+ }
- /**
- * 璁剧疆鏈夋晥鏃堕棿
- *
- * @param key Redis閿�
- * @param timeout 瓒呮椂鏃堕棿
- * @param unit 鏃堕棿鍗曚綅
- * @return true=璁剧疆鎴愬姛锛沠alse=璁剧疆澶辫触
- */
- public boolean expire(final String key, final long timeout, final TimeUnit unit)
- {
- return redisTemplate.expire(key, timeout, unit);
- }
+ /**
+ * 璁剧疆鏈夋晥鏃堕棿
+ *
+ * @param key Redis閿�
+ * @param timeout 瓒呮椂鏃堕棿
+ * @return true=璁剧疆鎴愬姛锛沠alse=璁剧疆澶辫触
+ */
+ public boolean expire(final String key, final long timeout) {
+ return expire(key, timeout, TimeUnit.SECONDS);
+ }
- /**
- * 鑾峰緱缂撳瓨鐨勫熀鏈璞°��
- *
- * @param key 缂撳瓨閿��
- * @return 缂撳瓨閿�煎搴旂殑鏁版嵁
- */
- public <T> T getCacheObject(final String key)
- {
- ValueOperations<String, T> operation = redisTemplate.opsForValue();
- return operation.get(key);
- }
+ /**
+ * 璁剧疆鏈夋晥鏃堕棿
+ *
+ * @param key Redis閿�
+ * @param timeout 瓒呮椂鏃堕棿
+ * @param unit 鏃堕棿鍗曚綅
+ * @return true=璁剧疆鎴愬姛锛沠alse=璁剧疆澶辫触
+ */
+ public boolean expire(final String key, final long timeout, final TimeUnit unit) {
+ RBucket rBucket = redissonClient.getBucket(key);
+ return rBucket.expire(timeout, unit);
+ }
- /**
- * 鍒犻櫎鍗曚釜瀵硅薄
- *
- * @param key
- */
- public boolean deleteObject(final String key)
- {
- return redisTemplate.delete(key);
- }
+ /**
+ * 鑾峰緱缂撳瓨鐨勫熀鏈璞°��
+ *
+ * @param key 缂撳瓨閿��
+ * @return 缂撳瓨閿�煎搴旂殑鏁版嵁
+ */
+ public <T> T getCacheObject(final String key) {
+ RBucket<T> rBucket = redissonClient.getBucket(key);
+ return rBucket.get();
+ }
- /**
- * 鍒犻櫎闆嗗悎瀵硅薄
- *
- * @param collection 澶氫釜瀵硅薄
- * @return
- */
- public long deleteObject(final Collection collection)
- {
- return redisTemplate.delete(collection);
- }
+ /**
+ * 鍒犻櫎鍗曚釜瀵硅薄
+ *
+ * @param key
+ */
+ public boolean deleteObject(final String key) {
+ return redissonClient.getBucket(key).delete();
+ }
- /**
- * 缂撳瓨List鏁版嵁
- *
- * @param key 缂撳瓨鐨勯敭鍊�
- * @param dataList 寰呯紦瀛樼殑List鏁版嵁
- * @return 缂撳瓨鐨勫璞�
- */
- public <T> long setCacheList(final String key, final List<T> dataList)
- {
- Long count = redisTemplate.opsForList().rightPushAll(key, dataList);
- return count == null ? 0 : count;
- }
+ /* */
- /**
- * 鑾峰緱缂撳瓨鐨刲ist瀵硅薄
- *
- * @param key 缂撳瓨鐨勯敭鍊�
- * @return 缂撳瓨閿�煎搴旂殑鏁版嵁
- */
- public <T> List<T> getCacheList(final String key)
- {
- return redisTemplate.opsForList().range(key, 0, -1);
- }
+ /**
+ * 鍒犻櫎闆嗗悎瀵硅薄
+ *
+ * @param collection 澶氫釜瀵硅薄
+ * @return
+ */
+ public long deleteObject(final Collection collection) {
+ return redissonClient.getKeys().delete(Arrays.toString(collection.toArray()));
+ }
- /**
- * 缂撳瓨Set
- *
- * @param key 缂撳瓨閿��
- * @param dataSet 缂撳瓨鐨勬暟鎹�
- * @return 缂撳瓨鏁版嵁鐨勫璞�
- */
- public <T> BoundSetOperations<String, T> setCacheSet(final String key, final Set<T> dataSet)
- {
- BoundSetOperations<String, T> setOperation = redisTemplate.boundSetOps(key);
- Iterator<T> it = dataSet.iterator();
- while (it.hasNext())
- {
- setOperation.add(it.next());
- }
- return setOperation;
- }
+ /**
+ * 缂撳瓨List鏁版嵁
+ *
+ * @param key 缂撳瓨鐨勯敭鍊�
+ * @param dataList 寰呯紦瀛樼殑List鏁版嵁
+ * @return 缂撳瓨鐨勫璞�
+ */
+ public <T> boolean setCacheList(final String key, final List<T> dataList) {
+ RList<T> rList = redissonClient.getList(key);
+ return rList.addAll(dataList);
+ }
- /**
- * 鑾峰緱缂撳瓨鐨剆et
- *
- * @param key
- * @return
- */
- public <T> Set<T> getCacheSet(final String key)
- {
- return redisTemplate.opsForSet().members(key);
- }
+ /**
+ * 鑾峰緱缂撳瓨鐨刲ist瀵硅薄
+ *
+ * @param key 缂撳瓨鐨勯敭鍊�
+ * @return 缂撳瓨閿�煎搴旂殑鏁版嵁
+ */
+ public <T> List<T> getCacheList(final String key) {
+ RList<T> rList = redissonClient.getList(key);
+ return rList.readAll();
+ }
- /**
- * 缂撳瓨Map
- *
- * @param key
- * @param dataMap
- */
- public <T> void setCacheMap(final String key, final Map<String, T> dataMap)
- {
- if (dataMap != null) {
- redisTemplate.opsForHash().putAll(key, dataMap);
- }
- }
+ /**
+ * 缂撳瓨Set
+ *
+ * @param key 缂撳瓨閿��
+ * @param dataSet 缂撳瓨鐨勬暟鎹�
+ * @return 缂撳瓨鏁版嵁鐨勫璞�
+ */
+ public <T> boolean setCacheSet(final String key, final Set<T> dataSet) {
+ RSet<T> rSet = redissonClient.getSet(key);
+ return rSet.addAll(dataSet);
+ }
- /**
- * 鑾峰緱缂撳瓨鐨凪ap
- *
- * @param key
- * @return
- */
- public <T> Map<String, T> getCacheMap(final String key)
- {
- return redisTemplate.opsForHash().entries(key);
- }
+ /**
+ * 鑾峰緱缂撳瓨鐨剆et
+ *
+ * @param key
+ * @return
+ */
+ public <T> Set<T> getCacheSet(final String key) {
+ RSet<T> rSet = redissonClient.getSet(key);
+ return rSet.readAll();
+ }
- /**
- * 寰�Hash涓瓨鍏ユ暟鎹�
- *
- * @param key Redis閿�
- * @param hKey Hash閿�
- * @param value 鍊�
- */
- public <T> void setCacheMapValue(final String key, final String hKey, final T value)
- {
- redisTemplate.opsForHash().put(key, hKey, value);
- }
+ /**
+ * 缂撳瓨Map
+ *
+ * @param key
+ * @param dataMap
+ */
+ public <T> void setCacheMap(final String key, final Map<String, T> dataMap) {
+ if (dataMap != null) {
+ RMap<String, T> rMap = redissonClient.getMap(key);
+ rMap.putAll(dataMap);
+ }
+ }
- /**
- * 鑾峰彇Hash涓殑鏁版嵁
- *
- * @param key Redis閿�
- * @param hKey Hash閿�
- * @return Hash涓殑瀵硅薄
- */
- public <T> T getCacheMapValue(final String key, final String hKey)
- {
- HashOperations<String, String, T> opsForHash = redisTemplate.opsForHash();
- return opsForHash.get(key, hKey);
- }
+ /**
+ * 鑾峰緱缂撳瓨鐨凪ap
+ *
+ * @param key
+ * @return
+ */
+ public <T> Map<String, T> getCacheMap(final String key) {
+ RMap<String, T> rMap = redissonClient.getMap(key);
+ return rMap.getAll(rMap.keySet());
+ }
- /**
- * 鑾峰彇澶氫釜Hash涓殑鏁版嵁
- *
- * @param key Redis閿�
- * @param hKeys Hash閿泦鍚�
- * @return Hash瀵硅薄闆嗗悎
- */
- public <T> List<T> getMultiCacheMapValue(final String key, final Collection<Object> hKeys)
- {
- return redisTemplate.opsForHash().multiGet(key, hKeys);
- }
+ /**
+ * 寰�Hash涓瓨鍏ユ暟鎹�
+ *
+ * @param key Redis閿�
+ * @param hKey Hash閿�
+ * @param value 鍊�
+ */
+ public <T> void setCacheMapValue(final String key, final String hKey, final T value) {
+ RMap<String, T> rMap = redissonClient.getMap(key);
+ rMap.put(hKey, value);
+ }
- /**
- * 鑾峰緱缂撳瓨鐨勫熀鏈璞″垪琛�
- *
- * @param pattern 瀛楃涓插墠缂�
- * @return 瀵硅薄鍒楄〃
- */
- public Collection<String> keys(final String pattern)
- {
- return redisTemplate.keys(pattern);
- }
+ /**
+ * 鑾峰彇Hash涓殑鏁版嵁
+ *
+ * @param key Redis閿�
+ * @param hKey Hash閿�
+ * @return Hash涓殑瀵硅薄
+ */
+ public <T> T getCacheMapValue(final String key, final String hKey) {
+ RMap<String, T> rMap = redissonClient.getMap(key);
+ return rMap.get(hKey);
+ }
+
+ /**
+ * 鑾峰彇澶氫釜Hash涓殑鏁版嵁
+ *
+ * @param key Redis閿�
+ * @param hKeys Hash閿泦鍚�
+ * @return Hash瀵硅薄闆嗗悎
+ */
+ public <T> List<T> getMultiCacheMapValue(final String key, final Collection<Object> hKeys) {
+ RListMultimap rListMultimap = redissonClient.getListMultimap(key);
+ return rListMultimap.getAll(hKeys);
+ }
+
+ /**
+ * 鑾峰緱缂撳瓨鐨勫熀鏈璞″垪琛�
+ *
+ * @param pattern 瀛楃涓插墠缂�
+ * @return 瀵硅薄鍒楄〃
+ */
+ public Collection<String> keys(final String pattern) {
+ Iterable<String> iterable = redissonClient.getKeys().getKeysByPattern(pattern);
+ return Lists.newArrayList(iterable);
+ }
}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java
index af471f4..b868729 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java
@@ -1,42 +1,69 @@
package com.ruoyi.framework.config;
-import com.alibaba.fastjson.support.spring.GenericFastJsonRedisSerializer;
+import com.ruoyi.framework.config.properties.RedissonProperties;
+import org.redisson.Redisson;
+import org.redisson.api.RedissonClient;
+import org.redisson.codec.JsonJacksonCodec;
+import org.redisson.config.Config;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
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 org.springframework.data.redis.connection.RedisConnectionFactory;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+import java.io.IOException;
/**
* redis閰嶇疆
*
- * @author ruoyi
+ * @author Lion Li
*/
@Configuration
@EnableCaching
-public class RedisConfig extends CachingConfigurerSupport
-{
- @Bean
- @SuppressWarnings(value = { "unchecked", "rawtypes" })
- public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory)
- {
- RedisTemplate<Object, Object> template = new RedisTemplate<>();
- template.setConnectionFactory(connectionFactory);
+public class RedisConfig extends CachingConfigurerSupport {
- GenericFastJsonRedisSerializer serializer = new GenericFastJsonRedisSerializer();
- StringRedisSerializer keySerializer = new StringRedisSerializer();
+ private static final String REDIS_PROTOCOL_PREFIX = "redis://";
+ private static final String REDISS_PROTOCOL_PREFIX = "rediss://";
- // 浣跨敤StringRedisSerializer鏉ュ簭鍒楀寲鍜屽弽搴忓垪鍖杛edis鐨刱ey鍊�
- template.setKeySerializer(keySerializer);
- template.setValueSerializer(serializer);
+ @Autowired
+ private RedisProperties redisProperties;
- // Hash鐨刱ey涔熼噰鐢⊿tringRedisSerializer鐨勫簭鍒楀寲鏂瑰紡
- template.setHashKeySerializer(keySerializer);
- template.setHashValueSerializer(serializer);
+ @Autowired
+ private RedissonProperties redissonProperties;
- template.afterPropertiesSet();
- return template;
- }
+ @Bean(destroyMethod = "shutdown")
+ @ConditionalOnMissingBean(RedissonClient.class)
+ public RedissonClient redisson() throws IOException {
+ String prefix = REDIS_PROTOCOL_PREFIX;
+ if (redisProperties.isSsl()) {
+ prefix = REDISS_PROTOCOL_PREFIX;
+ }
+ Config config = new Config();
+ config.setThreads(redissonProperties.getThreads())
+ .setNettyThreads(redissonProperties.getNettyThreads())
+ .setCodec(JsonJacksonCodec.INSTANCE)
+ .setTransportMode(redissonProperties.getTransportMode());
+
+ RedissonProperties.SingleServerConfig singleServerConfig = redissonProperties.getSingleServerConfig();
+ // 浣跨敤鍗曟満妯″紡
+ config.useSingleServer()
+ .setAddress(prefix + redisProperties.getHost() + ":" + redisProperties.getPort())
+ .setConnectTimeout(((Long) redisProperties.getTimeout().toMillis()).intValue())
+ .setDatabase(redisProperties.getDatabase())
+ .setPassword(redisProperties.getPassword())
+ .setTimeout(singleServerConfig.getTimeout())
+ .setRetryAttempts(singleServerConfig.getRetryAttempts())
+ .setRetryInterval(singleServerConfig.getRetryInterval())
+ .setSubscriptionsPerConnection(singleServerConfig.getSubscriptionsPerConnection())
+ .setClientName(singleServerConfig.getClientName())
+ .setIdleConnectionTimeout(singleServerConfig.getIdleConnectionTimeout())
+ .setSubscriptionConnectionMinimumIdleSize(singleServerConfig.getSubscriptionConnectionMinimumIdleSize())
+ .setSubscriptionConnectionPoolSize(singleServerConfig.getSubscriptionConnectionPoolSize())
+ .setConnectionMinimumIdleSize(singleServerConfig.getConnectionMinimumIdleSize())
+ .setConnectionPoolSize(singleServerConfig.getConnectionPoolSize())
+ .setDnsMonitoringInterval(singleServerConfig.getDnsMonitoringInterval());
+ return Redisson.create(config);
+ }
}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/RedissonProperties.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/RedissonProperties.java
new file mode 100644
index 0000000..99db89e
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/RedissonProperties.java
@@ -0,0 +1,101 @@
+package com.ruoyi.framework.config.properties;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.redisson.client.codec.Codec;
+import org.redisson.config.TransportMode;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * Redisson 閰嶇疆灞炴��
+ *
+ * @author Lion Li
+ */
+@Data
+@Component
+@ConfigurationProperties(prefix = "redisson")
+public class RedissonProperties {
+
+ /**
+ * 绾跨▼姹犳暟閲�,榛樿鍊� = 褰撳墠澶勭悊鏍告暟閲� * 2
+ */
+ private int threads;
+
+ /**
+ * Netty绾跨▼姹犳暟閲�,榛樿鍊� = 褰撳墠澶勭悊鏍告暟閲� * 2
+ */
+ private int nettyThreads;
+
+ /**
+ * 浼犺緭妯″紡
+ */
+ private TransportMode transportMode;
+
+ /**
+ * 鍗曟満鏈嶅姟閰嶇疆
+ */
+ private SingleServerConfig singleServerConfig;
+
+ @Data
+ @NoArgsConstructor
+ public static class SingleServerConfig {
+
+ /**
+ * 瀹㈡埛绔悕绉�
+ */
+ private String clientName;
+
+ /**
+ * 鏈�灏忕┖闂茶繛鎺ユ暟
+ */
+ private int connectionMinimumIdleSize;
+
+ /**
+ * 杩炴帴姹犲ぇ灏�
+ */
+ private int connectionPoolSize;
+
+ /**
+ * 杩炴帴绌洪棽瓒呮椂锛屽崟浣嶏細姣
+ */
+ private int idleConnectionTimeout;
+
+ /**
+ * 鍛戒护绛夊緟瓒呮椂锛屽崟浣嶏細姣
+ */
+ private int timeout;
+
+ /**
+ * 濡傛灉灏濊瘯鍦ㄦ闄愬埗涔嬪唴鍙戦�佹垚鍔燂紝鍒欏紑濮嬪惎鐢� timeout 璁℃椂銆�
+ */
+ private int retryAttempts;
+
+ /**
+ * 鍛戒护閲嶈瘯鍙戦�佹椂闂撮棿闅旓紝鍗曚綅锛氭绉�
+ */
+ private int retryInterval;
+
+ /**
+ * 鍙戝竷鍜岃闃呰繛鎺ョ殑鏈�灏忕┖闂茶繛鎺ユ暟
+ */
+ private int subscriptionConnectionMinimumIdleSize;
+
+ /**
+ * 鍙戝竷鍜岃闃呰繛鎺ユ睜澶у皬
+ */
+ private int subscriptionConnectionPoolSize;
+
+ /**
+ * 鍗曚釜杩炴帴鏈�澶ц闃呮暟閲�
+ */
+ private int subscriptionsPerConnection;
+
+ /**
+ * DNS鐩戞祴鏃堕棿闂撮殧锛屽崟浣嶏細姣
+ */
+ private int dnsMonitoringInterval;
+
+ }
+
+}
--
Gitblit v1.9.3