From e2d370bd9d3d51c8bb4d702addb466fa5f3f13bf Mon Sep 17 00:00:00 2001
From: 疯狂的狮子li <15040126243@163.com>
Date: 星期五, 26 十一月 2021 13:42:20 +0800
Subject: [PATCH] update 移除 satoken 自带集成 redis 改为使用 框架自身 Redission 实现 统一方案 性能优异
---
ruoyi-common/src/main/java/com/ruoyi/common/utils/RedisUtils.java | 36 ++++++++
ruoyi-framework/src/main/java/com/ruoyi/framework/dao/PlusSaTokenDao.java | 178 ++++++++++++++++++++++++++++++++++++++++++++
pom.xml | 6 -
ruoyi-common/pom.xml | 5 -
4 files changed, 213 insertions(+), 12 deletions(-)
diff --git a/pom.xml b/pom.xml
index 55a8c88..f2155ba 100644
--- a/pom.xml
+++ b/pom.xml
@@ -130,12 +130,6 @@
<artifactId>sa-token-spring-boot-starter</artifactId>
<version>${satoken.version}</version>
</dependency>
- <!-- Sa-Token 鏁村悎 Redis 锛堜娇鐢╦ackson搴忓垪鍖栨柟寮忥級 -->
- <dependency>
- <groupId>cn.dev33</groupId>
- <artifactId>sa-token-dao-redis-jackson</artifactId>
- <version>${satoken.version}</version>
- </dependency>
<!-- Sa-Token鏁村悎SpringAOP瀹炵幇娉ㄨВ閴存潈 -->
<dependency>
<groupId>cn.dev33</groupId>
diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
index 2b0f940..5f04400 100644
--- a/ruoyi-common/pom.xml
+++ b/ruoyi-common/pom.xml
@@ -34,11 +34,6 @@
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId>
</dependency>
- <!-- Sa-Token 鏁村悎 Redis 锛堜娇鐢╦ackson搴忓垪鍖栨柟寮忥級 -->
- <dependency>
- <groupId>cn.dev33</groupId>
- <artifactId>sa-token-dao-redis-jackson</artifactId>
- </dependency>
<!-- Sa-Token鏁村悎SpringAOP瀹炵幇娉ㄨВ閴存潈 -->
<dependency>
<groupId>cn.dev33</groupId>
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/RedisUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/RedisUtils.java
index 394bdb2..27472a7 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/RedisUtils.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/RedisUtils.java
@@ -92,6 +92,29 @@
}
/**
+ * 缂撳瓨鍩烘湰鐨勫璞★紝淇濈暀褰撳墠瀵硅薄 TTL 鏈夋晥鏈�
+ *
+ * @param key 缂撳瓨鐨勯敭鍊�
+ * @param value 缂撳瓨鐨勫��
+ * @param isSaveTtl 鏄惁淇濈暀TTL鏈夋晥鏈�(渚嬪: set涔嬪墠ttl鍓╀綑90 set涔嬪悗杩樻槸涓�90)
+ * @since Redis 6.X 浠ヤ笂浣跨敤 setAndKeepTTL 鍏煎 5.X 鏂规
+ */
+ public static <T> void setCacheObject(final String key, final T value, final boolean isSaveTtl) {
+ RBucket<Object> bucket = client.getBucket(key);
+ if (isSaveTtl) {
+ try {
+ bucket.setAndKeepTTL(value);
+ } catch (Exception e) {
+ long timeToLive = bucket.remainTimeToLive();
+ bucket.set(value);
+ bucket.expire(timeToLive, TimeUnit.MILLISECONDS);
+ }
+ } else {
+ bucket.set(value);
+ }
+ }
+
+ /**
* 缂撳瓨鍩烘湰鐨勫璞★紝Integer銆丼tring銆佸疄浣撶被绛�
*
* @param key 缂撳瓨鐨勯敭鍊�
@@ -99,7 +122,7 @@
* @param timeout 鏃堕棿
* @param timeUnit 鏃堕棿棰楃矑搴�
*/
- public static <T> void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit) {
+ public static <T> void setCacheObject(final String key, final T value, final long timeout, final TimeUnit timeUnit) {
RBucket<T> result = client.getBucket(key);
result.set(value);
result.expire(timeout, timeUnit);
@@ -141,6 +164,17 @@
}
/**
+ * 鑾峰緱key鍓╀綑瀛樻椿鏃堕棿
+ *
+ * @param key 缂撳瓨閿��
+ * @return 鍓╀綑瀛樻椿鏃堕棿
+ */
+ public static <T> long getTimeToLive(final String key) {
+ RBucket<T> rBucket = client.getBucket(key);
+ return rBucket.remainTimeToLive();
+ }
+
+ /**
* 鍒犻櫎鍗曚釜瀵硅薄
*
* @param key
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/dao/PlusSaTokenDao.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/dao/PlusSaTokenDao.java
new file mode 100644
index 0000000..6d1c6fb
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/dao/PlusSaTokenDao.java
@@ -0,0 +1,178 @@
+package com.ruoyi.framework.dao;
+
+import cn.dev33.satoken.dao.SaTokenDao;
+import cn.dev33.satoken.util.SaFoxUtil;
+import com.ruoyi.common.utils.RedisUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Sa-Token鎸佷箙灞傛帴鍙�(浣跨敤妗嗘灦鑷甫RedisUtils瀹炵幇 鍗忚缁熶竴)
+ *
+ * @author Lion Li
+ */
+@Component
+public class PlusSaTokenDao implements SaTokenDao {
+
+ /**
+ * 鑾峰彇Value锛屽鏃犺繑绌�
+ */
+ @Override
+ public String get(String key) {
+ return RedisUtils.getCacheObject(key);
+ }
+
+ /**
+ * 鍐欏叆Value锛屽苟璁惧畾瀛樻椿鏃堕棿 (鍗曚綅: 绉�)
+ */
+ @Override
+ public void set(String key, String value, long timeout) {
+ if(timeout == 0 || timeout <= SaTokenDao.NOT_VALUE_EXPIRE) {
+ return;
+ }
+ // 鍒ゆ柇鏄惁涓烘案涓嶈繃鏈�
+ if(timeout == SaTokenDao.NEVER_EXPIRE) {
+ RedisUtils.setCacheObject(key, value);
+ } else {
+ RedisUtils.setCacheObject(key, value, timeout, TimeUnit.SECONDS);
+ }
+ }
+
+ /**
+ * 淇慨鏀规寚瀹歬ey-value閿�煎 (杩囨湡鏃堕棿涓嶅彉)
+ */
+ @Override
+ public void update(String key, String value) {
+ long expire = getTimeout(key);
+ // -2 = 鏃犳閿�
+ if(expire == SaTokenDao.NOT_VALUE_EXPIRE) {
+ return;
+ }
+ this.set(key, value, expire);
+ }
+
+ /**
+ * 鍒犻櫎Value
+ */
+ @Override
+ public void delete(String key) {
+ RedisUtils.deleteObject(key);
+ }
+
+ /**
+ * 鑾峰彇Value鐨勫墿浣欏瓨娲绘椂闂� (鍗曚綅: 绉�)
+ */
+ @Override
+ public long getTimeout(String key) {
+ return RedisUtils.getTimeToLive(key);
+ }
+
+ /**
+ * 淇敼Value鐨勫墿浣欏瓨娲绘椂闂� (鍗曚綅: 绉�)
+ */
+ @Override
+ public void updateTimeout(String key, long timeout) {
+ // 鍒ゆ柇鏄惁鎯宠璁剧疆涓烘案涔�
+ if(timeout == SaTokenDao.NEVER_EXPIRE) {
+ long expire = getTimeout(key);
+ if(expire == SaTokenDao.NEVER_EXPIRE) {
+ // 濡傛灉鍏跺凡缁忚璁剧疆涓烘案涔咃紝鍒欎笉浣滀换浣曞鐞�
+ } else {
+ // 濡傛灉灏氭湭琚缃负姘镐箙锛岄偅涔堝啀娆et涓�娆�
+ this.set(key, this.get(key), timeout);
+ }
+ return;
+ }
+ RedisUtils.expire(key, timeout, TimeUnit.SECONDS);
+ }
+
+
+
+ /**
+ * 鑾峰彇Object锛屽鏃犺繑绌�
+ */
+ @Override
+ public Object getObject(String key) {
+ return RedisUtils.getCacheObject(key);
+ }
+
+ /**
+ * 鍐欏叆Object锛屽苟璁惧畾瀛樻椿鏃堕棿 (鍗曚綅: 绉�)
+ */
+ @Override
+ public void setObject(String key, Object object, long timeout) {
+ if(timeout == 0 || timeout <= SaTokenDao.NOT_VALUE_EXPIRE) {
+ return;
+ }
+ // 鍒ゆ柇鏄惁涓烘案涓嶈繃鏈�
+ if(timeout == SaTokenDao.NEVER_EXPIRE) {
+ RedisUtils.setCacheObject(key, object);
+ } else {
+ RedisUtils.setCacheObject(key, object, timeout, TimeUnit.SECONDS);
+ }
+ }
+
+ /**
+ * 鏇存柊Object (杩囨湡鏃堕棿涓嶅彉)
+ */
+ @Override
+ public void updateObject(String key, Object object) {
+ long expire = getObjectTimeout(key);
+ // -2 = 鏃犳閿�
+ if(expire == SaTokenDao.NOT_VALUE_EXPIRE) {
+ return;
+ }
+ this.setObject(key, object, expire);
+ }
+
+ /**
+ * 鍒犻櫎Object
+ */
+ @Override
+ public void deleteObject(String key) {
+ RedisUtils.deleteObject(key);
+ }
+
+ /**
+ * 鑾峰彇Object鐨勫墿浣欏瓨娲绘椂闂� (鍗曚綅: 绉�)
+ */
+ @Override
+ public long getObjectTimeout(String key) {
+ return RedisUtils.getTimeToLive(key);
+ }
+
+ /**
+ * 淇敼Object鐨勫墿浣欏瓨娲绘椂闂� (鍗曚綅: 绉�)
+ */
+ @Override
+ public void updateObjectTimeout(String key, long timeout) {
+ // 鍒ゆ柇鏄惁鎯宠璁剧疆涓烘案涔�
+ if(timeout == SaTokenDao.NEVER_EXPIRE) {
+ long expire = getObjectTimeout(key);
+ if(expire == SaTokenDao.NEVER_EXPIRE) {
+ // 濡傛灉鍏跺凡缁忚璁剧疆涓烘案涔咃紝鍒欎笉浣滀换浣曞鐞�
+ } else {
+ // 濡傛灉灏氭湭琚缃负姘镐箙锛岄偅涔堝啀娆et涓�娆�
+ this.setObject(key, this.getObject(key), timeout);
+ }
+ return;
+ }
+ RedisUtils.expire(key, timeout, TimeUnit.SECONDS);
+ }
+
+
+ /**
+ * 鎼滅储鏁版嵁
+ */
+ @Override
+ public List<String> searchData(String prefix, String keyword, int start, int size) {
+ Collection<String> keys = RedisUtils.keys(prefix + "*" + keyword + "*");
+ List<String> list = new ArrayList<>(keys);
+ return SaFoxUtil.searchList(list, start, size);
+ }
+
+}
--
Gitblit v1.9.3