From 09585d3f0b9ca67f93a6d5f0d887aad29e3fb19a Mon Sep 17 00:00:00 2001 From: Jie Zheng <201507802@qq.com> Date: Wed, 15 Jan 2025 15:04:38 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=BC=98=E5=8C=96RedisUtils?= =?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=BC=BA=E7=BC=93=E5=AD=98=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/me/zhengjie/utils/RedisUtils.java | 108 +++++++++++++++--- .../service/impl/QuartzJobServiceImpl.java | 4 +- .../rest/AuthorizationController.java | 2 +- .../security/service/OnlineUserService.java | 4 +- .../security/service/UserCacheManager.java | 5 +- .../service/impl/VerifyServiceImpl.java | 11 +- 6 files changed, 105 insertions(+), 29 deletions(-) diff --git a/eladmin-common/src/main/java/me/zhengjie/utils/RedisUtils.java b/eladmin-common/src/main/java/me/zhengjie/utils/RedisUtils.java index 65d02789..76fa7f40 100644 --- a/eladmin-common/src/main/java/me/zhengjie/utils/RedisUtils.java +++ b/eladmin-common/src/main/java/me/zhengjie/utils/RedisUtils.java @@ -15,6 +15,7 @@ */ package me.zhengjie.utils; +import cn.hutool.core.util.StrUtil; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import org.slf4j.Logger; @@ -24,14 +25,16 @@ import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.*; import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.stereotype.Component; + import java.util.*; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; /** * @author / */ @Component -@SuppressWarnings({"unchecked", "all"}) +@SuppressWarnings({"all"}) public class RedisUtils { private static final Logger log = LoggerFactory.getLogger(RedisUtils.class); @@ -39,9 +42,8 @@ public class RedisUtils { public RedisUtils(RedisTemplate redisTemplate) { this.redisTemplate = redisTemplate; - this.redisTemplate.setHashKeySerializer(new StringRedisSerializer()); this.redisTemplate.setKeySerializer(new StringRedisSerializer()); - this.redisTemplate.setStringSerializer(new StringRedisSerializer()); + this.redisTemplate.setHashKeySerializer(new StringRedisSerializer()); } /** @@ -221,6 +223,65 @@ public class RedisUtils { return key == null ? null : redisTemplate.opsForValue().get(key); } + /** + * 普通缓存获取 + * + * @param key 键 + * @return 值 + */ + public T get(String key, Class clazz) { + Object value = key == null ? null : redisTemplate.opsForValue().get(key); + if (value == null) { + return null; + } + if (clazz.isInstance(value)) { + return clazz.cast(value); + } else { + return null; + } + } + + /** + * 普通缓存获取 + * + * @param key 键 + * @param clazz 列表中元素的类型 + * @return 值 + */ + public List getList(String key, Class clazz) { + Object value = key == null ? null : redisTemplate.opsForValue().get(key); + if (value == null) { + return null; + } + if (value instanceof List) { + List list = (List) value; + // 检查每个元素是否为指定类型 + if (list.stream().allMatch(clazz::isInstance)) { + return list.stream().map(clazz::cast).collect(Collectors.toList()); + } + } + return null; + } + + + /** + * 普通缓存获取 + * + * @param key 键 + * @return 值 + */ + public String getStr(String key) { + if(StrUtil.isBlank(key)){ + return null; + } + Object value = redisTemplate.opsForValue().get(key); + if (value == null) { + return null; + } else { + return String.valueOf(value); + } + } + /** * 批量获取 * @@ -242,13 +303,17 @@ public class RedisUtils { * @return true成功 false失败 */ public boolean set(String key, Object value) { - try { - redisTemplate.opsForValue().set(key, value); - return true; - } catch (Exception e) { - log.error(e.getMessage(), e); - return false; + int attempt = 0; + while (attempt < 3) { + try { + redisTemplate.opsForValue().set(key, value); + return true; + } catch (Exception e) { + attempt++; + log.error("Attempt {} failed: {}", attempt, e.getMessage(), e); + } } + return false; } /** @@ -716,10 +781,25 @@ public class RedisUtils { keys.addAll(redisTemplate.keys(new StringBuffer(prefix).append(id).toString())); } long count = redisTemplate.delete(keys); - // 此处提示可自行删除 - log.debug("--------------------------------------------"); - log.debug("成功删除缓存:" + keys.toString()); - log.debug("缓存删除数量:" + count + "个"); - log.debug("--------------------------------------------"); + } + + // ============================incr============================= + + /** + * 递增 + * @param key + * @return + */ + public Long increment(String key) { + return redisTemplate.opsForValue().increment(key); + } + + /** + * 递减 + * @param key + * @return + */ + public Long decrement(String key) { + return redisTemplate.opsForValue().decrement(key); } } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/quartz/service/impl/QuartzJobServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/quartz/service/impl/QuartzJobServiceImpl.java index 06341e20..9915b0df 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/quartz/service/impl/QuartzJobServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/quartz/service/impl/QuartzJobServiceImpl.java @@ -145,11 +145,11 @@ public class QuartzJobServiceImpl implements QuartzJobService { // 执行任务 execution(quartzJob); // 获取执行状态,如果执行失败则停止后面的子任务执行 - Boolean result = (Boolean) redisUtils.get(uuid); + Boolean result = redisUtils.get(uuid, Boolean.class); while (result == null) { // 休眠5秒,再次获取子任务执行情况 Thread.sleep(5000); - result = (Boolean) redisUtils.get(uuid); + result = redisUtils.get(uuid, Boolean.class); } if(!result){ redisUtils.del(uuid); diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/security/rest/AuthorizationController.java b/eladmin-system/src/main/java/me/zhengjie/modules/security/rest/AuthorizationController.java index effb15f5..04476de0 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/security/rest/AuthorizationController.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/security/rest/AuthorizationController.java @@ -79,7 +79,7 @@ public class AuthorizationController { // 密码解密 String password = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey, authUser.getPassword()); // 查询验证码 - String code = (String) redisUtils.get(authUser.getUuid()); + String code = redisUtils.get(authUser.getUuid(), String.class); // 清除验证码 redisUtils.del(authUser.getUuid()); if (StringUtils.isBlank(code)) { diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/security/service/OnlineUserService.java b/eladmin-system/src/main/java/me/zhengjie/modules/security/service/OnlineUserService.java index d1fd765d..c496d8cd 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/security/service/OnlineUserService.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/security/service/OnlineUserService.java @@ -92,7 +92,7 @@ public class OnlineUserService { Collections.reverse(keys); List onlineUserDtos = new ArrayList<>(); for (String key : keys) { - onlineUserDtos.add((OnlineUserDto) redisUtils.get(key)); + onlineUserDtos.add(redisUtils.get(key, OnlineUserDto.class)); } onlineUserDtos.sort((o1, o2) -> o2.getLoginTime().compareTo(o1.getLoginTime())); return onlineUserDtos; @@ -134,7 +134,7 @@ public class OnlineUserService { * @return / */ public OnlineUserDto getOne(String key) { - return (OnlineUserDto)redisUtils.get(key); + return redisUtils.get(key, OnlineUserDto.class); } /** diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/security/service/UserCacheManager.java b/eladmin-system/src/main/java/me/zhengjie/modules/security/service/UserCacheManager.java index 0808e65d..03870dc0 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/security/service/UserCacheManager.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/security/service/UserCacheManager.java @@ -46,10 +46,7 @@ public class UserCacheManager { public JwtUserDto getUserCache(String userName) { if (StringUtils.isNotEmpty(userName)) { // 获取数据 - Object obj = redisUtils.get(LoginProperties.cacheKey + userName); - if(obj != null){ - return (JwtUserDto)obj; - } + return redisUtils.get(LoginProperties.cacheKey + userName, JwtUserDto.class); } return null; } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/VerifyServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/VerifyServiceImpl.java index 9f8c8ac5..e58b3eac 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/VerifyServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/VerifyServiceImpl.java @@ -52,7 +52,7 @@ public class VerifyServiceImpl implements VerifyService { // 如果不存在有效的验证码,就创建一个新的 TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig("template", TemplateConfig.ResourceMode.CLASSPATH)); Template template = engine.getTemplate("email.ftl"); - Object oldCode = redisUtils.get(redisKey); + String oldCode = redisUtils.get(redisKey, String.class); if(oldCode == null){ String code = RandomUtil.randomNumbers (6); // 存入缓存 @@ -60,19 +60,18 @@ public class VerifyServiceImpl implements VerifyService { throw new BadRequestException("服务异常,请联系网站负责人"); } content = template.render(Dict.create().set("code",code)); - emailVo = new EmailVo(Collections.singletonList(email),"ELADMIN后台管理系统",content); - // 存在就再次发送原来的验证码 + // 存在就再次发送原来的验证码 } else { content = template.render(Dict.create().set("code",oldCode)); - emailVo = new EmailVo(Collections.singletonList(email),"ELADMIN后台管理系统",content); } + emailVo = new EmailVo(Collections.singletonList(email),"ELADMIN后台管理系统",content); return emailVo; } @Override public void validated(String key, String code) { - Object value = redisUtils.get(key); - if(value == null || !value.toString().equals(code)){ + String value = redisUtils.get(key, String.class); + if(!code.equals(value)){ throw new BadRequestException("无效验证码"); } else { redisUtils.del(key);