refactor: 重构缓存逻辑.
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
package com.orion.ops.module.asset.define.cache;
|
||||
|
||||
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;
|
||||
import com.orion.ops.module.asset.entity.dto.HostCacheDTO;
|
||||
import com.orion.ops.module.asset.entity.dto.HostIdentityCacheDTO;
|
||||
import com.orion.ops.module.asset.entity.dto.HostKeyCacheDTO;
|
||||
@@ -21,6 +22,7 @@ public interface HostCacheKeyDefine {
|
||||
.key("host:info:list")
|
||||
.desc("主机列表")
|
||||
.type(HostCacheDTO.class)
|
||||
.struct(RedisCacheStruct.HASH)
|
||||
.timeout(1, TimeUnit.DAYS)
|
||||
.build();
|
||||
|
||||
@@ -28,6 +30,7 @@ public interface HostCacheKeyDefine {
|
||||
.key("host:key:list")
|
||||
.desc("主机秘钥列表")
|
||||
.type(HostKeyCacheDTO.class)
|
||||
.struct(RedisCacheStruct.HASH)
|
||||
.timeout(1, TimeUnit.DAYS)
|
||||
.build();
|
||||
|
||||
@@ -35,6 +38,7 @@ public interface HostCacheKeyDefine {
|
||||
.key("host:identity:list")
|
||||
.desc("主机身份列表")
|
||||
.type(HostIdentityCacheDTO.class)
|
||||
.struct(RedisCacheStruct.HASH)
|
||||
.timeout(1, TimeUnit.DAYS)
|
||||
.build();
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.orion.ops.module.asset.entity.dto;
|
||||
|
||||
import com.orion.lang.define.cache.key.model.LongCacheIdModel;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
@@ -20,7 +21,7 @@ import java.io.Serializable;
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Schema(name = "HostCacheDTO", description = "主机 缓存对象")
|
||||
public class HostCacheDTO implements Serializable {
|
||||
public class HostCacheDTO implements LongCacheIdModel, Serializable {
|
||||
|
||||
@Schema(description = "id")
|
||||
private Long id;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.orion.ops.module.asset.entity.dto;
|
||||
|
||||
import com.orion.lang.define.cache.key.model.LongCacheIdModel;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
@@ -20,7 +21,7 @@ import java.io.Serializable;
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Schema(name = "HostIdentityCacheDTO", description = "主机身份缓存")
|
||||
public class HostIdentityCacheDTO implements Serializable {
|
||||
public class HostIdentityCacheDTO implements LongCacheIdModel, Serializable {
|
||||
|
||||
@Schema(description = "id")
|
||||
private Long id;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.orion.ops.module.asset.entity.dto;
|
||||
|
||||
import com.orion.lang.define.cache.key.model.LongCacheIdModel;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
@@ -20,7 +21,7 @@ import java.io.Serializable;
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Schema(name = "HostKeyCacheDTO", description = "主机秘钥缓存")
|
||||
public class HostKeyCacheDTO implements Serializable {
|
||||
public class HostKeyCacheDTO implements LongCacheIdModel, Serializable {
|
||||
|
||||
@Schema(description = "id")
|
||||
private Long id;
|
||||
|
||||
@@ -64,4 +64,11 @@ public interface HostService {
|
||||
*/
|
||||
Integer deleteHostById(Long id);
|
||||
|
||||
/**
|
||||
* 通过 id 删除主机引用
|
||||
*
|
||||
* @param id id
|
||||
*/
|
||||
void deleteHostRelByIdAsync(Long id);
|
||||
|
||||
}
|
||||
|
||||
@@ -6,8 +6,8 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.orion.lang.define.wrapper.DataGrid;
|
||||
import com.orion.lang.utils.Strings;
|
||||
import com.orion.lang.utils.collect.Lists;
|
||||
import com.orion.ops.framework.biz.operator.log.core.uitls.OperatorLogs;
|
||||
import com.orion.ops.framework.common.constant.Const;
|
||||
import com.orion.ops.framework.common.constant.ErrorMessage;
|
||||
import com.orion.ops.framework.common.security.PasswordModifier;
|
||||
import com.orion.ops.framework.common.utils.Valid;
|
||||
@@ -117,21 +117,16 @@ public class HostIdentityServiceImpl implements HostIdentityService {
|
||||
if (list.isEmpty()) {
|
||||
// 查询数据库
|
||||
list = hostIdentityDAO.of().list(HostIdentityConvert.MAPPER::toCache);
|
||||
// 添加默认值 防止穿透
|
||||
if (list.isEmpty()) {
|
||||
list.add(HostIdentityCacheDTO.builder()
|
||||
.id(Const.NONE_ID)
|
||||
.build());
|
||||
}
|
||||
// 设置屏障 防止穿透
|
||||
RedisMaps.checkBarrier(list, HostIdentityCacheDTO::new);
|
||||
// 设置缓存
|
||||
RedisMaps.putAllJson(HostCacheKeyDefine.HOST_IDENTITY.getKey(), s -> s.getId().toString(), list);
|
||||
RedisMaps.setExpire(HostCacheKeyDefine.HOST_IDENTITY);
|
||||
}
|
||||
// 删除默认值
|
||||
return list.stream()
|
||||
.filter(s -> !s.getId().equals(Const.NONE_ID))
|
||||
.map(HostIdentityConvert.MAPPER::to)
|
||||
.collect(Collectors.toList());
|
||||
// 删除屏障
|
||||
RedisMaps.removeBarrier(list);
|
||||
// 转换
|
||||
return Lists.map(list, HostIdentityConvert.MAPPER::to);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -4,8 +4,8 @@ import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.orion.lang.define.wrapper.DataGrid;
|
||||
import com.orion.lang.utils.Strings;
|
||||
import com.orion.lang.utils.collect.Lists;
|
||||
import com.orion.ops.framework.biz.operator.log.core.uitls.OperatorLogs;
|
||||
import com.orion.ops.framework.common.constant.Const;
|
||||
import com.orion.ops.framework.common.constant.ErrorMessage;
|
||||
import com.orion.ops.framework.common.security.PasswordModifier;
|
||||
import com.orion.ops.framework.common.utils.CryptoUtils;
|
||||
@@ -29,7 +29,6 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 主机秘钥 服务实现类
|
||||
@@ -131,21 +130,16 @@ public class HostKeyServiceImpl implements HostKeyService {
|
||||
if (list.isEmpty()) {
|
||||
// 查询数据库
|
||||
list = hostKeyDAO.of().list(HostKeyConvert.MAPPER::toCache);
|
||||
// 添加默认值 防止穿透
|
||||
if (list.isEmpty()) {
|
||||
list.add(HostKeyCacheDTO.builder()
|
||||
.id(Const.NONE_ID)
|
||||
.build());
|
||||
}
|
||||
// 设置屏障 防止穿透
|
||||
RedisMaps.checkBarrier(list, HostKeyCacheDTO::new);
|
||||
// 设置缓存
|
||||
RedisMaps.putAllJson(HostCacheKeyDefine.HOST_KEY.getKey(), s -> s.getId().toString(), list);
|
||||
RedisMaps.setExpire(HostCacheKeyDefine.HOST_KEY);
|
||||
}
|
||||
// 删除默认值
|
||||
return list.stream()
|
||||
.filter(s -> !s.getId().equals(Const.NONE_ID))
|
||||
.map(HostKeyConvert.MAPPER::to)
|
||||
.collect(Collectors.toList());
|
||||
// 删除屏障
|
||||
RedisMaps.removeBarrier(list);
|
||||
// 转换
|
||||
return Lists.map(list, HostKeyConvert.MAPPER::to);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -7,7 +7,6 @@ import com.orion.lang.utils.Booleans;
|
||||
import com.orion.lang.utils.Strings;
|
||||
import com.orion.lang.utils.collect.Lists;
|
||||
import com.orion.ops.framework.biz.operator.log.core.uitls.OperatorLogs;
|
||||
import com.orion.ops.framework.common.constant.Const;
|
||||
import com.orion.ops.framework.common.constant.ErrorMessage;
|
||||
import com.orion.ops.framework.common.utils.Valid;
|
||||
import com.orion.ops.framework.redis.core.utils.RedisMaps;
|
||||
@@ -31,6 +30,7 @@ import com.orion.ops.module.infra.entity.dto.tag.TagDTO;
|
||||
import com.orion.ops.module.infra.enums.DataGroupTypeEnum;
|
||||
import com.orion.ops.module.infra.enums.FavoriteTypeEnum;
|
||||
import com.orion.ops.module.infra.enums.TagTypeEnum;
|
||||
import com.orion.spring.SpringHolder;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -83,7 +83,7 @@ public class HostServiceImpl implements HostService {
|
||||
log.info("HostService-createHost effect: {}", effect);
|
||||
Long id = record.getId();
|
||||
// 插入 tag
|
||||
tagRelApi.addTagRelAsync(TagTypeEnum.HOST, id, request.getTags());
|
||||
tagRelApi.addTagRel(TagTypeEnum.HOST, id, request.getTags());
|
||||
// 引用分组
|
||||
List<Long> groupIdList = request.getGroupIdList();
|
||||
if (!Lists.isEmpty(groupIdList)) {
|
||||
@@ -119,10 +119,10 @@ public class HostServiceImpl implements HostService {
|
||||
log.info("HostService-updateHostById effect: {}", effect);
|
||||
// 引用分组
|
||||
dataGroupRelApi.updateGroupRel(DataGroupTypeEnum.HOST, request.getGroupIdList(), id);
|
||||
// 更新 tag
|
||||
tagRelApi.setTagRel(TagTypeEnum.HOST, id, request.getTags());
|
||||
// 删除缓存
|
||||
RedisMaps.delete(HostCacheKeyDefine.HOST_INFO);
|
||||
// 更新 tag
|
||||
tagRelApi.setTagRelAsync(TagTypeEnum.HOST, id, request.getTags());
|
||||
return effect;
|
||||
}
|
||||
|
||||
@@ -154,21 +154,16 @@ public class HostServiceImpl implements HostService {
|
||||
if (list.isEmpty()) {
|
||||
// 查询数据库
|
||||
list = hostDAO.of().list(HostConvert.MAPPER::toCache);
|
||||
// 添加默认值 防止穿透
|
||||
if (list.isEmpty()) {
|
||||
list.add(HostCacheDTO.builder()
|
||||
.id(Const.NONE_ID)
|
||||
.build());
|
||||
}
|
||||
// 设置屏障 防止穿透
|
||||
RedisMaps.checkBarrier(list, HostCacheDTO::new);
|
||||
// 设置缓存
|
||||
RedisMaps.putAllJson(HostCacheKeyDefine.HOST_INFO.getKey(), s -> s.getId().toString(), list);
|
||||
RedisMaps.setExpire(HostCacheKeyDefine.HOST_INFO);
|
||||
}
|
||||
// 删除默认值
|
||||
return list.stream()
|
||||
.filter(s -> !s.getId().equals(Const.NONE_ID))
|
||||
.map(HostConvert.MAPPER::to)
|
||||
.collect(Collectors.toList());
|
||||
// 删除屏障
|
||||
RedisMaps.removeBarrier(list);
|
||||
// 转换
|
||||
return Lists.map(list, HostConvert.MAPPER::to);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -198,17 +193,24 @@ public class HostServiceImpl implements HostService {
|
||||
// 删除
|
||||
int effect = hostDAO.deleteById(id);
|
||||
log.info("HostService-deleteHostById effect: {}", effect);
|
||||
// 删除缓存
|
||||
RedisMaps.delete(HostCacheKeyDefine.HOST_INFO, id);
|
||||
// 删除主机引用
|
||||
SpringHolder.getBean(HostService.class)
|
||||
.deleteHostRelByIdAsync(id);
|
||||
return effect;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteHostRelByIdAsync(Long id) {
|
||||
// 删除配置
|
||||
hostConfigDAO.deleteByHostId(id);
|
||||
// 删除分组
|
||||
dataGroupRelApi.deleteByRelId(DataGroupTypeEnum.HOST, id);
|
||||
// 删除缓存
|
||||
RedisMaps.delete(HostCacheKeyDefine.HOST_INFO, id);
|
||||
// 删除 tag 引用
|
||||
tagRelApi.deleteRelIdAsync(TagTypeEnum.HOST, id);
|
||||
tagRelApi.deleteRelId(TagTypeEnum.HOST, id);
|
||||
// 删除收藏引用
|
||||
favoriteApi.deleteByRelIdAsync(FavoriteTypeEnum.HOST, id);
|
||||
return effect;
|
||||
favoriteApi.deleteByRelId(FavoriteTypeEnum.HOST, id);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user