refactor: 重构缓存逻辑.

This commit is contained in:
lijiahangmax
2023-11-15 02:04:55 +08:00
parent 34ea140004
commit 30f0496328
38 changed files with 235 additions and 169 deletions

View File

@@ -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})

View File

@@ -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

View File

@@ -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

View File

@@ -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()));
}
}
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;