From 48beb19ef272b630c5c8bcee53da004b868fdbe0 Mon Sep 17 00:00:00 2001 From: wanggeng <450292408@qq.com> Date: Tue, 30 Nov 2021 15:40:28 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9redis=E7=9A=84token=E5=A4=84?= =?UTF-8?q?=E7=90=86=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../manager/app/RedisAppTokenService.java | 47 +++++++++---------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/redis-cache/src/main/java/ink/wgink/redis/cache/manager/app/RedisAppTokenService.java b/redis-cache/src/main/java/ink/wgink/redis/cache/manager/app/RedisAppTokenService.java index 10169fc3..f57c981f 100644 --- a/redis-cache/src/main/java/ink/wgink/redis/cache/manager/app/RedisAppTokenService.java +++ b/redis-cache/src/main/java/ink/wgink/redis/cache/manager/app/RedisAppTokenService.java @@ -11,9 +11,8 @@ import org.springframework.context.annotation.Primary; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.concurrent.TimeUnit; /** * @ClassName: RedisAppTokenManager @@ -32,10 +31,11 @@ public class RedisAppTokenService implements IAppTokenService { @Override public AppToken getToken(String token) { - AppToken appToken = (AppToken) redisTemplate.opsForHash().entries(TOKEN_HASH_KEY).get(token); + String tokenKey = TOKEN_HASH_KEY + token; + AppToken appToken = (AppToken) redisTemplate.opsForValue().get(tokenKey); if (appToken != null) { appToken.setLastTime(System.currentTimeMillis()); - redisTemplate.opsForHash().put(TOKEN_HASH_KEY, appToken.getToken(), appToken); + redisTemplate.opsForValue().set(tokenKey, appToken, 10, TimeUnit.MINUTES); } return appToken; } @@ -48,23 +48,25 @@ public class RedisAppTokenService implements IAppTokenService { appToken.setLastTime(System.currentTimeMillis()); appToken.setAppTokenUser(appTokenUser); appToken.setUserId(appTokenUser.getId()); - Map tokens = redisTemplate.opsForHash().entries(TOKEN_HASH_KEY); - for (Map.Entry kvs : tokens.entrySet()) { - if (StringUtils.equals(appToken.getAppTokenUser().getId(), kvs.getValue().getUserId())) { - redisTemplate.opsForHash().delete(TOKEN_HASH_KEY, kvs.getValue().getToken()); + + Set keys = redisTemplate.keys(TOKEN_HASH_KEY + "*"); + List existAppTokens = redisTemplate.opsForValue().multiGet(keys); + for (AppToken existAppToken : existAppTokens) { + if (StringUtils.equals(appToken.getAppTokenUser().getId(), existAppToken.getUserId())) { + redisTemplate.delete(TOKEN_HASH_KEY + existAppToken.getToken()); break; } } - redisTemplate.opsForHash().put(TOKEN_HASH_KEY, appToken.getToken(), appToken); + redisTemplate.opsForValue().set(TOKEN_HASH_KEY + token, appToken, 10, TimeUnit.MINUTES); } @Override public List listCurrentUsers() { List users = new ArrayList<>(); - Map tokens = redisTemplate.opsForHash().entries(TOKEN_HASH_KEY); - for (Map.Entry kvs : tokens.entrySet()) { - AppToken appToken = kvs.getValue(); - users.add(appToken.getAppTokenUser()); + Set keys = redisTemplate.keys(TOKEN_HASH_KEY + "*"); + List existAppTokens = redisTemplate.opsForValue().multiGet(keys); + for (AppToken existAppToken : existAppTokens) { + users.add(existAppToken.getAppTokenUser()); } return users; } @@ -72,18 +74,15 @@ public class RedisAppTokenService implements IAppTokenService { @Override public void clearTimeoutToken() { long currentTime = System.currentTimeMillis(); - List clearTokenKeys = new ArrayList<>(0); - Map tokens = redisTemplate.opsForHash().entries(TOKEN_HASH_KEY); - for (Map.Entry kvs : tokens.entrySet()) { - AppToken appToken = kvs.getValue(); - // 超过10分钟 - if (currentTime - appToken.getLastTime() > 600000L) { - clearTokenKeys.add(kvs.getKey()); + Set clearTokenKeys = new HashSet<>(16); + Set keys = redisTemplate.keys(TOKEN_HASH_KEY + "*"); + List existAppTokens = redisTemplate.opsForValue().multiGet(keys); + for (AppToken existAppToken : existAppTokens) { + if (currentTime - existAppToken.getLastTime() > 600000L) { + clearTokenKeys.add(TOKEN_HASH_KEY + existAppToken.getToken()); } } - for (String tokenKey : clearTokenKeys) { - redisTemplate.opsForHash().delete(TOKEN_HASH_KEY, tokenKey); - } + redisTemplate.delete(clearTokenKeys); LOG.trace("本次共清理超时Token:{}个", clearTokenKeys.size()); } }