From f1208474f771a1c233d7425c8ed13fbaa0d521ac Mon Sep 17 00:00:00 2001 From: baoshiwei <baoshiwei@shlanbao.cn> Date: 星期三, 12 三月 2025 09:35:13 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/5.X' into 5.X --- ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/dao/PlusSaTokenDao.java | 46 +++++++++++++++++++++++++++++++++++++++------- 1 files changed, 39 insertions(+), 7 deletions(-) diff --git a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/dao/PlusSaTokenDao.java b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/dao/PlusSaTokenDao.java index d885962..a2a1520 100644 --- a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/dao/PlusSaTokenDao.java +++ b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/dao/PlusSaTokenDao.java @@ -2,26 +2,41 @@ import cn.dev33.satoken.dao.SaTokenDao; import cn.dev33.satoken.util.SaFoxUtil; +import com.github.benmanes.caffeine.cache.Cache; +import com.github.benmanes.caffeine.cache.Caffeine; import org.dromara.common.redis.utils.RedisUtils; import java.time.Duration; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.concurrent.TimeUnit; /** * Sa-Token鎸佷箙灞傛帴鍙�(浣跨敤妗嗘灦鑷甫RedisUtils瀹炵幇 鍗忚缁熶竴) + * <p> + * 閲囩敤 caffeine + redis 澶氱骇缂撳瓨 浼樺寲骞跺彂鏌ヨ鏁堢巼 * * @author Lion Li */ public class PlusSaTokenDao implements SaTokenDao { + + private static final Cache<String, Object> CAFFEINE = Caffeine.newBuilder() + // 璁剧疆鏈�鍚庝竴娆″啓鍏ユ垨璁块棶鍚庣粡杩囧浐瀹氭椂闂磋繃鏈� + .expireAfterWrite(5, TimeUnit.SECONDS) + // 鍒濆鐨勭紦瀛樼┖闂村ぇ灏� + .initialCapacity(100) + // 缂撳瓨鐨勬渶澶ф潯鏁� + .maximumSize(1000) + .build(); /** * 鑾峰彇Value锛屽鏃犺繑绌� */ @Override public String get(String key) { - return RedisUtils.getCacheObject(key); + Object o = CAFFEINE.get(key, k -> RedisUtils.getCacheObject(key)); + return (String) o; } /** @@ -36,8 +51,13 @@ if (timeout == NEVER_EXPIRE) { RedisUtils.setCacheObject(key, value); } else { - RedisUtils.setCacheObject(key, value, Duration.ofSeconds(timeout)); + if (RedisUtils.hasKey(key)) { + RedisUtils.setCacheObject(key, value, true); + } else { + RedisUtils.setCacheObject(key, value, Duration.ofSeconds(timeout)); + } } + CAFFEINE.invalidate(key); } /** @@ -47,6 +67,7 @@ public void update(String key, String value) { if (RedisUtils.hasKey(key)) { RedisUtils.setCacheObject(key, value, true); + CAFFEINE.invalidate(key); } } @@ -81,7 +102,8 @@ */ @Override public Object getObject(String key) { - return RedisUtils.getCacheObject(key); + Object o = CAFFEINE.get(key, k -> RedisUtils.getCacheObject(key)); + return o; } /** @@ -96,8 +118,13 @@ if (timeout == NEVER_EXPIRE) { RedisUtils.setCacheObject(key, object); } else { - RedisUtils.setCacheObject(key, object, Duration.ofSeconds(timeout)); + if (RedisUtils.hasKey(key)) { + RedisUtils.setCacheObject(key, object, true); + } else { + RedisUtils.setCacheObject(key, object, Duration.ofSeconds(timeout)); + } } + CAFFEINE.invalidate(key); } /** @@ -107,6 +134,7 @@ public void updateObject(String key, Object object) { if (RedisUtils.hasKey(key)) { RedisUtils.setCacheObject(key, object, true); + CAFFEINE.invalidate(key); } } @@ -139,10 +167,14 @@ /** * 鎼滅储鏁版嵁 */ + @SuppressWarnings("unchecked") @Override public List<String> searchData(String prefix, String keyword, int start, int size, boolean sortType) { - Collection<String> keys = RedisUtils.keys(prefix + "*" + keyword + "*"); - List<String> list = new ArrayList<>(keys); - return SaFoxUtil.searchList(list, start, size, sortType); + String keyStr = prefix + "*" + keyword + "*"; + return (List<String>) CAFFEINE.get(keyStr, k -> { + Collection<String> keys = RedisUtils.keys(keyStr); + List<String> list = new ArrayList<>(keys); + return SaFoxUtil.searchList(list, start, size, sortType); + }); } } -- Gitblit v1.9.3