mirror of https://github.com/elunez/eladmin
refactor: 优化RedisUtils,增强缓存获取功能
parent
c62ac4c383
commit
09585d3f0b
|
@ -15,6 +15,7 @@
|
||||||
*/
|
*/
|
||||||
package me.zhengjie.utils;
|
package me.zhengjie.utils;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
import org.slf4j.Logger;
|
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.core.*;
|
||||||
import org.springframework.data.redis.serializer.StringRedisSerializer;
|
import org.springframework.data.redis.serializer.StringRedisSerializer;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author /
|
* @author /
|
||||||
*/
|
*/
|
||||||
@Component
|
@Component
|
||||||
@SuppressWarnings({"unchecked", "all"})
|
@SuppressWarnings({"all"})
|
||||||
public class RedisUtils {
|
public class RedisUtils {
|
||||||
private static final Logger log = LoggerFactory.getLogger(RedisUtils.class);
|
private static final Logger log = LoggerFactory.getLogger(RedisUtils.class);
|
||||||
|
|
||||||
|
@ -39,9 +42,8 @@ public class RedisUtils {
|
||||||
|
|
||||||
public RedisUtils(RedisTemplate<Object, Object> redisTemplate) {
|
public RedisUtils(RedisTemplate<Object, Object> redisTemplate) {
|
||||||
this.redisTemplate = redisTemplate;
|
this.redisTemplate = redisTemplate;
|
||||||
this.redisTemplate.setHashKeySerializer(new StringRedisSerializer());
|
|
||||||
this.redisTemplate.setKeySerializer(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);
|
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失败
|
* @return true成功 false失败
|
||||||
*/
|
*/
|
||||||
public boolean set(String key, Object value) {
|
public boolean set(String key, Object value) {
|
||||||
try {
|
int attempt = 0;
|
||||||
redisTemplate.opsForValue().set(key, value);
|
while (attempt < 3) {
|
||||||
return true;
|
try {
|
||||||
} catch (Exception e) {
|
redisTemplate.opsForValue().set(key, value);
|
||||||
log.error(e.getMessage(), e);
|
return true;
|
||||||
return false;
|
} 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()));
|
keys.addAll(redisTemplate.keys(new StringBuffer(prefix).append(id).toString()));
|
||||||
}
|
}
|
||||||
long count = redisTemplate.delete(keys);
|
long count = redisTemplate.delete(keys);
|
||||||
// 此处提示可自行删除
|
}
|
||||||
log.debug("--------------------------------------------");
|
|
||||||
log.debug("成功删除缓存:" + keys.toString());
|
// ============================incr=============================
|
||||||
log.debug("缓存删除数量:" + count + "个");
|
|
||||||
log.debug("--------------------------------------------");
|
/**
|
||||||
|
* 递增
|
||||||
|
* @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);
|
execution(quartzJob);
|
||||||
// 获取执行状态,如果执行失败则停止后面的子任务执行
|
// 获取执行状态,如果执行失败则停止后面的子任务执行
|
||||||
Boolean result = (Boolean) redisUtils.get(uuid);
|
Boolean result = redisUtils.get(uuid, Boolean.class);
|
||||||
while (result == null) {
|
while (result == null) {
|
||||||
// 休眠5秒,再次获取子任务执行情况
|
// 休眠5秒,再次获取子任务执行情况
|
||||||
Thread.sleep(5000);
|
Thread.sleep(5000);
|
||||||
result = (Boolean) redisUtils.get(uuid);
|
result = redisUtils.get(uuid, Boolean.class);
|
||||||
}
|
}
|
||||||
if(!result){
|
if(!result){
|
||||||
redisUtils.del(uuid);
|
redisUtils.del(uuid);
|
||||||
|
|
|
@ -79,7 +79,7 @@ public class AuthorizationController {
|
||||||
// 密码解密
|
// 密码解密
|
||||||
String password = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey, authUser.getPassword());
|
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());
|
redisUtils.del(authUser.getUuid());
|
||||||
if (StringUtils.isBlank(code)) {
|
if (StringUtils.isBlank(code)) {
|
||||||
|
|
|
@ -92,7 +92,7 @@ public class OnlineUserService {
|
||||||
Collections.reverse(keys);
|
Collections.reverse(keys);
|
||||||
List<OnlineUserDto> onlineUserDtos = new ArrayList<>();
|
List<OnlineUserDto> onlineUserDtos = new ArrayList<>();
|
||||||
for (String key : keys) {
|
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()));
|
onlineUserDtos.sort((o1, o2) -> o2.getLoginTime().compareTo(o1.getLoginTime()));
|
||||||
return onlineUserDtos;
|
return onlineUserDtos;
|
||||||
|
@ -134,7 +134,7 @@ public class OnlineUserService {
|
||||||
* @return /
|
* @return /
|
||||||
*/
|
*/
|
||||||
public OnlineUserDto getOne(String key) {
|
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) {
|
public JwtUserDto getUserCache(String userName) {
|
||||||
if (StringUtils.isNotEmpty(userName)) {
|
if (StringUtils.isNotEmpty(userName)) {
|
||||||
// 获取数据
|
// 获取数据
|
||||||
Object obj = redisUtils.get(LoginProperties.cacheKey + userName);
|
return redisUtils.get(LoginProperties.cacheKey + userName, JwtUserDto.class);
|
||||||
if(obj != null){
|
|
||||||
return (JwtUserDto)obj;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,7 +52,7 @@ public class VerifyServiceImpl implements VerifyService {
|
||||||
// 如果不存在有效的验证码,就创建一个新的
|
// 如果不存在有效的验证码,就创建一个新的
|
||||||
TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig("template", TemplateConfig.ResourceMode.CLASSPATH));
|
TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig("template", TemplateConfig.ResourceMode.CLASSPATH));
|
||||||
Template template = engine.getTemplate("email.ftl");
|
Template template = engine.getTemplate("email.ftl");
|
||||||
Object oldCode = redisUtils.get(redisKey);
|
String oldCode = redisUtils.get(redisKey, String.class);
|
||||||
if(oldCode == null){
|
if(oldCode == null){
|
||||||
String code = RandomUtil.randomNumbers (6);
|
String code = RandomUtil.randomNumbers (6);
|
||||||
// 存入缓存
|
// 存入缓存
|
||||||
|
@ -60,19 +60,18 @@ public class VerifyServiceImpl implements VerifyService {
|
||||||
throw new BadRequestException("服务异常,请联系网站负责人");
|
throw new BadRequestException("服务异常,请联系网站负责人");
|
||||||
}
|
}
|
||||||
content = template.render(Dict.create().set("code",code));
|
content = template.render(Dict.create().set("code",code));
|
||||||
emailVo = new EmailVo(Collections.singletonList(email),"ELADMIN后台管理系统",content);
|
// 存在就再次发送原来的验证码
|
||||||
// 存在就再次发送原来的验证码
|
|
||||||
} else {
|
} else {
|
||||||
content = template.render(Dict.create().set("code",oldCode));
|
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;
|
return emailVo;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void validated(String key, String code) {
|
public void validated(String key, String code) {
|
||||||
Object value = redisUtils.get(key);
|
String value = redisUtils.get(key, String.class);
|
||||||
if(value == null || !value.toString().equals(code)){
|
if(!code.equals(value)){
|
||||||
throw new BadRequestException("无效验证码");
|
throw new BadRequestException("无效验证码");
|
||||||
} else {
|
} else {
|
||||||
redisUtils.del(key);
|
redisUtils.del(key);
|
||||||
|
|
Loading…
Reference in New Issue