mirror of https://github.com/elunez/eladmin
refactor: 优化RedisUtils,增强缓存获取功能
parent
c62ac4c383
commit
09585d3f0b
|
@ -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<Object, Object> 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> T get(String key, Class<T> 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 <T> List<T> getList(String key, Class<T> 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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)) {
|
||||
|
|
|
@ -92,7 +92,7 @@ public class OnlineUserService {
|
|||
Collections.reverse(keys);
|
||||
List<OnlineUserDto> 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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue