refactor: 重构缓存逻辑.
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package ${currentPackage};
|
||||
|
||||
import com.orion.lang.define.cache.key.model.LongCacheIdModel;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import java.io.Serializable;
|
||||
import lombok.*;
|
||||
@@ -19,7 +20,7 @@ import java.math.*;
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Schema(name = "${type}CacheDTO", description = "$!{table.comment} 缓存对象")
|
||||
public class ${type}CacheDTO implements Serializable {
|
||||
public class ${type}CacheDTO implements LongCacheIdModel, Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
#foreach($field in ${table.fields})
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
package ${currentPackage};
|
||||
|
||||
import com.orion.lang.define.cache.CacheKeyBuilder;
|
||||
import com.orion.lang.define.cache.CacheKeyDefine;
|
||||
import com.orion.lang.define.cache.key.CacheKeyBuilder;
|
||||
import com.orion.lang.define.cache.key.CacheKeyDefine;
|
||||
import com.orion.lang.define.cache.key.struct.RedisCacheStruct;
|
||||
#foreach($pkg in ${customModuleFilePackages})
|
||||
import ${pkg}.*;
|
||||
#end
|
||||
@@ -21,6 +22,7 @@ public interface ${type}CacheKeyDefine {
|
||||
.key("$meta.cacheKey")
|
||||
.desc("$meta.cacheDesc")
|
||||
.type(${type}CacheDTO.class)
|
||||
.struct(RedisCacheStruct.HASH)
|
||||
#if($meta.cacheExpired)
|
||||
.timeout($meta.cacheExpireTime, TimeUnit.$meta.cacheExpireUnit.name())
|
||||
#end
|
||||
|
||||
@@ -8,9 +8,6 @@ import com.orion.lang.utils.collect.Lists;
|
||||
#if($meta.enableExport)
|
||||
import com.orion.office.excel.writer.exporting.ExcelExport;
|
||||
#end
|
||||
#if($meta.enableCache)
|
||||
import com.orion.ops.framework.common.constant.Const;
|
||||
#end
|
||||
import com.orion.ops.framework.common.constant.ErrorMessage;
|
||||
import com.orion.ops.framework.common.utils.FileNames;
|
||||
import com.orion.ops.framework.common.utils.Valid;
|
||||
@@ -32,7 +29,6 @@ import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* $!{table.comment} 服务实现类
|
||||
@@ -140,21 +136,16 @@ public class ${table.serviceImplName} implements ${table.serviceName} {
|
||||
if (list.isEmpty()) {
|
||||
// 查询数据库
|
||||
list = ${typeLower}DAO.of().list(${type}Convert.MAPPER::toCache);
|
||||
// 添加默认值 防止穿透
|
||||
if (list.isEmpty()) {
|
||||
list.add(${type}CacheDTO.builder()
|
||||
.id(Const.NONE_ID)
|
||||
.build());
|
||||
}
|
||||
// 设置屏障 防止穿透
|
||||
RedisMaps.checkBarrier(list, ${type}CacheDTO::new);
|
||||
// 设置缓存
|
||||
RedisMaps.putAllJson(${type}CacheKeyDefine.${typeConst}.getKey(), s -> s.getId().toString(), list);
|
||||
RedisMaps.setExpire(${type}CacheKeyDefine.${typeConst});
|
||||
}
|
||||
// 删除默认值
|
||||
return list.stream()
|
||||
.filter(s -> !s.getId().equals(Const.NONE_ID))
|
||||
.map(${type}Convert.MAPPER::to)
|
||||
.collect(Collectors.toList());
|
||||
// 删除屏障
|
||||
RedisMaps.removeBarrier(list);
|
||||
// 转换
|
||||
return Lists.map(list, ${type}Convert.MAPPER::to);
|
||||
}
|
||||
|
||||
#end
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
package com.orion.ops.framework.redis.core.utils;
|
||||
|
||||
import com.orion.lang.define.cache.key.model.LongCacheIdModel;
|
||||
import com.orion.lang.utils.collect.Lists;
|
||||
import com.orion.ops.framework.common.constant.Const;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
/**
|
||||
* 缓存工具类
|
||||
*
|
||||
* @author Jiahang Li
|
||||
* @version 1.0.0
|
||||
* @since 2023/11/15 1:22
|
||||
*/
|
||||
public class CacheUtils {
|
||||
|
||||
protected CacheUtils() {
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建屏障对象 防止穿透
|
||||
*
|
||||
* @param supplier supplier
|
||||
* @param <T> T
|
||||
* @return barrier
|
||||
*/
|
||||
public static <T extends LongCacheIdModel> T createBarrier(Supplier<T> supplier) {
|
||||
T val = supplier.get();
|
||||
val.setId(Const.NONE_ID);
|
||||
return val;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 检测是否需要 创建屏障对象 防止穿透
|
||||
*
|
||||
* @param list list
|
||||
* @param supplier supplier
|
||||
* @param <T> T
|
||||
*/
|
||||
public static <T extends LongCacheIdModel> void checkBarrier(List<T> list, Supplier<T> supplier) {
|
||||
if (list != null && list.isEmpty()) {
|
||||
// 添加屏障对象
|
||||
list.add(createBarrier(supplier));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 移除屏障对象
|
||||
*
|
||||
* @param list list
|
||||
* @param <T> T
|
||||
*/
|
||||
public static <T extends LongCacheIdModel> void removeBarrier(Collection<T> list) {
|
||||
if (!Lists.isEmpty(list)) {
|
||||
list.removeIf(s -> Const.NONE_ID.equals(s.getId()));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.orion.ops.framework.redis.core.utils;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.orion.lang.define.cache.CacheKeyDefine;
|
||||
import com.orion.lang.define.cache.key.CacheKeyDefine;
|
||||
import com.orion.lang.utils.collect.Lists;
|
||||
import com.orion.ops.framework.common.constant.Const;
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.orion.ops.framework.redis.core.utils;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.orion.lang.define.cache.CacheKeyDefine;
|
||||
import com.orion.lang.define.cache.key.CacheKeyDefine;
|
||||
import com.orion.lang.function.Functions;
|
||||
import com.orion.lang.utils.Objects1;
|
||||
import com.orion.lang.utils.collect.Lists;
|
||||
|
||||
@@ -3,7 +3,7 @@ package com.orion.ops.framework.redis.core.utils;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.orion.lang.define.cache.CacheKeyDefine;
|
||||
import com.orion.lang.define.cache.key.CacheKeyDefine;
|
||||
import com.orion.lang.utils.Strings;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.orion.ops.framework.redis.core.utils;
|
||||
|
||||
import com.orion.lang.define.cache.CacheKeyDefine;
|
||||
import com.orion.lang.define.cache.key.CacheKeyDefine;
|
||||
import com.orion.lang.utils.Arrays1;
|
||||
import com.orion.lang.utils.io.Streams;
|
||||
import org.springframework.data.redis.core.Cursor;
|
||||
@@ -20,7 +20,7 @@ import java.util.Set;
|
||||
* @version 1.0.0
|
||||
* @since 2021/11/6 11:09
|
||||
*/
|
||||
public class RedisUtils {
|
||||
public class RedisUtils extends CacheUtils {
|
||||
|
||||
protected static RedisTemplate<String, String> redisTemplate;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user