From a3a5b4014da8fa34beae1db565850c2e3b7f1ee6 Mon Sep 17 00:00:00 2001 From: wanggeng <450292408@qq.com> Date: Tue, 2 Aug 2022 17:58:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0redis=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../manager/app/RedisAppTokenService.java | 7 +- .../files/RedisFilesShowCodeService.java | 75 +++++++++++++++++++ 2 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 redis-cache/src/main/java/ink/wgink/redis/cache/manager/files/RedisFilesShowCodeService.java 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 f57c981f..27b71246 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,7 +11,10 @@ import org.springframework.context.annotation.Primary; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; -import java.util.*; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; import java.util.concurrent.TimeUnit; /** @@ -83,6 +86,6 @@ public class RedisAppTokenService implements IAppTokenService { } } redisTemplate.delete(clearTokenKeys); - LOG.trace("本次共清理超时Token:{}个", clearTokenKeys.size()); + LOG.trace(">>>>>> count of timeout token: {}", clearTokenKeys.size()); } } diff --git a/redis-cache/src/main/java/ink/wgink/redis/cache/manager/files/RedisFilesShowCodeService.java b/redis-cache/src/main/java/ink/wgink/redis/cache/manager/files/RedisFilesShowCodeService.java new file mode 100644 index 00000000..0f135188 --- /dev/null +++ b/redis-cache/src/main/java/ink/wgink/redis/cache/manager/files/RedisFilesShowCodeService.java @@ -0,0 +1,75 @@ +package ink.wgink.redis.cache.manager.files; + +import ink.wgink.exceptions.ParamsException; +import ink.wgink.interfaces.manager.IFilesShowCodeService; +import ink.wgink.pojo.bos.files.FilesShowCode; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Primary; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; + +import java.util.HashSet; +import java.util.Set; + +/** + * @ClassName: RedisFilesShowCodeServiceImpl + * @Description: 文件展示码 + * @Author: wanggeng + * @Date: 2022/8/1 17:42 + * @Version: 1.0 + */ +@Primary +@Component +public class RedisFilesShowCodeService implements IFilesShowCodeService { + + private static final Logger LOG = LoggerFactory.getLogger(RedisFilesShowCodeService.class); + @Autowired + private RedisTemplate redisTemplate; + + @Override + public void addShowCode(String code, String fileId, String fileName) { + redisTemplate.opsForValue().set(FILE_SHOW_CODE_KEY + fileId, new FilesShowCode(code, fileId, fileName)); + } + + @Override + public void clearTimeoutShowCode() { + Set keySet = redisTemplate.keys(FILE_SHOW_CODE_KEY); + long currentTimeMillis = System.currentTimeMillis(); + Set clearKeys = new HashSet<>(16); + long clearTimeoutShowCodeCount = 0; + for (String key : keySet) { + FilesShowCode showCode = getShowCode(key); + if (currentTimeMillis - showCode.getLatestUpdateTime() > SHOW_CODE_TIMEOUT_MILLIS) { + clearKeys.add(FILE_SHOW_CODE_KEY + showCode.getFileId()); + } + } + redisTemplate.delete(clearKeys); + LOG.debug(">>>>>> count of clear timeout show code: {}", clearTimeoutShowCodeCount); + } + + @Override + public FilesShowCode getShowCode(String fileId, String code) { + FilesShowCode showCode = getShowCode(fileId); + if (showCode == null) { + throw new ParamsException("查看码不存在"); + } + if (!StringUtils.equals(showCode.getCode(), code)) { + throw new ParamsException("查看码不匹配"); + } + return showCode; + } + + @Override + public synchronized FilesShowCode getShowCode(String fileId) { + FilesShowCode showCode = (FilesShowCode) redisTemplate.opsForValue().get(FILE_SHOW_CODE_KEY + fileId); + if (showCode != null) { + showCode.setLatestUpdateTime(System.currentTimeMillis()); + redisTemplate.opsForValue().set(FILE_SHOW_CODE_KEY + fileId, showCode); + } + return showCode; + } + +}