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