提交 a863b2f3 作者: obcy

【清空专题数据逻辑修改】

上级 6648725e
......@@ -31,6 +31,25 @@ public interface RemoteModelService {
@GetMapping("/modelArrange/clbBiz/delMiddelDataBySubjectId")
String removeMiddleDataRequest(@RequestParam("subjectId") String subjectId);
/**
* 中断专题处理
*
* @param subjectId 中断专题处理
* @author lkg
* @date 2025/2/7
*/
@GetMapping("/modelArrange/clbModelMonitor/breakSubjcet")
String breakSubjcet(@RequestParam("subjectId") String subjectId);
/**
* 查询正在运行的专题
*
* @param subjectId 查询正在运行的专题
* @author lkg
* @date 2025/2/7
*/
@GetMapping("/modelArrange/clbModelMonitor/isRunningList")
String isRunningList(@RequestParam("subjectId") String subjectId);
/**
* 清除专题缓存
......
package com.zzsn.event.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson2.JSON;
......@@ -80,6 +81,8 @@ public class SubjectSimpleServiceImpl implements SubjectSimpleService {
private CodeGenerateUtil codeGenerateUtil;
@Autowired
private PythonUtil pythonUtil;
@Autowired
private RedisUtil redisUtil;
@Autowired(required = false)
private RemoteModelService remoteModelService;
......@@ -530,8 +533,31 @@ public class SubjectSimpleServiceImpl implements SubjectSimpleService {
boolQuery.must(QueryBuilders.termQuery("subjectId.keyword", subjectId));
esOpUtil.docDeleteByQuery(Constants.SUBJECT_INDEX, boolQuery);
});
remoteModelService.removeMiddleDataRequest(subjectId);
log.info("专题-{},删除中间库数据请求发送成功", subjectId);
try {
remoteModelService.removeMiddleDataRequest(subjectId);
//删除专题相关的key
Subject byId = subjectService.getById(subjectId);
String subjectCode = byId.getSubjectCode();
Set<String> keys = redisUtil.keys(subjectCode);
if (CollectionUtil.isNotEmpty(keys)) {
keys.forEach(key -> {
redisUtil.del(key);
});
}
//判断是否需要中断数据处理
String runningList = remoteModelService.isRunningList(byId.getId());
if (runningList.contains(byId.getSubjectCode())){
remoteModelService.breakSubjcet(subjectId);
}
} catch (Exception e) {
log.error("专题-{},删除中间库数据、删除专题相关缓存key、中断专题处理、请求发送失败", subjectId, e);
}
log.info("专题-{},删除中间库数据、删除专题相关缓存key、中断专题处理、请求发送成功", subjectId);
}
//目标集合按照另一个集合的顺序排序
......
......@@ -552,5 +552,33 @@ public class RedisUtil {
public void rpushMultipleValues(String key, Object... values) {
redisTemplate.opsForList().rightPushAll(key, values);
}
/**
* 获取指定前缀的一系列key
* 使用scan命令代替keys, Redis是单线程处理,keys命令在KEY数量较多时,
* 操作效率极低【时间复杂度为O(N)】,该命令一旦执行会严重阻塞线上其它命令的正常请求
* @param keyPrefix key统一的前缀
*/
public Set<String> keys(String keyPrefix) {
String realKey = keyPrefix + "*";
try {
return redisTemplate.execute((RedisCallback<Set<String>>) connection -> {
Set<String> binaryKeys = new HashSet<>();
Cursor<byte[]> cursor = connection.scan(ScanOptions.scanOptions().match(realKey).count(Integer.MAX_VALUE).build());
while (cursor.hasNext()) {
binaryKeys.add(new String(cursor.next()));
}
return binaryKeys;
});
} catch (Throwable e) {
e.printStackTrace();
}
return null;
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论