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,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();

View File

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

View File

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

View File

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

View File

@@ -64,4 +64,11 @@ public interface HostService {
*/
Integer deleteHostById(Long id);
/**
* 通过 id 删除主机引用
*
* @param id id
*/
void deleteHostRelByIdAsync(Long id);
}

View File

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

View File

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

View File

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