当前位置: 首页 > article >正文

redis 中缓存 百万级别表的查询数据 出错:Query execution was interrupted

项目背景:项目需要 首检合格率 这个结果,但是sql执行非常慢,就想着使用redis来优化接口的速度。现在我需要将数据库查询结果存储到redis,但是就是这一小步,也非常困难。我是用定时任务来实现上面的目的。

@Component
@Slf4j
public class FirstInspectionPassRateTask {
    @Autowired
    private CheckResultMapper checkResultMapper;

    @Autowired
    private InspectionStationInfoMapper inspectionStationInfoMapper;

    @Autowired
    private RedisTemplate redisTemplate;

    @Scheduled(cron = "0 32 13 * * ?")
    public void calculateFirstInspectionPassRate(){
        log.info("####### 定时任务开启......");
        ValueOperations<String ,String> operations = redisTemplate.opsForValue();

        NumberFormat numberFormat = NumberFormat.getPercentInstance();
        numberFormat.setMinimumFractionDigits(2);

        List<String> unitIdList = inspectionStationInfoMapper.selectUnitId();//单位id 集合
        unitIdList = Optional.ofNullable(unitIdList).orElse(new ArrayList<>());
        //这里只给2024表中的统计数据,因为首检合格率需要跨表,目前我也想不出如何编写 TODO
        List<String> monthList = new ArrayList<>(Arrays.asList("03"));

        unitIdList.forEach(unitId -> {
            monthList.forEach(month -> {
                List<String> bgList = new ArrayList<>();
                //查询指定机构的 首检报告列表
                bgList = checkResultMapper.getFirstInspectionReportCount(unitId, "2024", month);
                bgList = Optional.ofNullable(bgList).orElse(new ArrayList<>());
                //计算指定机构的 首检报告数量
                Long bgSum = (long) bgList.size();

                //首检合格率
                String rate = "0.00%";
                if(bgSum != 0){
                    //计算异常的首检报告数量
                    Long warnBgSum = checkResultMapper.getWarnFirstInspectionReportCount(unitId,"2024",month,bgList);
                    rate = numberFormat.format((bgSum-warnBgSum)/bgSum.doubleValue());
                }
                rate = rate.substring(0,rate.length() -1 );//去除最后的 % 方便前端处理

                String key = String.format("SZJDC:CHECKRESULT:BGBH:%s",unitId+"-2024-"+month);
                operations.set(key,rate,20, TimeUnit.DAYS);
            });
        });
    }

}

 就在执行这个定时任务,我出现了非常多的报错:Query execution was interrupted

Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6eaf527b]
10:45:18.655 [pool-2-thread-1] ERROR o.s.s.s.TaskUtils$LoggingErrorHandler - Unexpected error occurred in scheduled task
org.springframework.dao.QueryTimeoutException:
### Error querying database. Cause: java.sql.SQLTimeoutException: Query execution was interrupted
### The error may exist in file [D:\workspace\IdeaProjects\szjdc-service\sz-warning-platform\target\classes\mappers\CheckResultMapper.xml]
### The error may involve com.iflytek.warning.mapper.CheckResultMapper.getFirstInspectionReportCount
### The error occurred while handling results
### SQL: select BGBH from check_result_2024 cr WHERE year(CHECK_DATE) = ? and month(CHECK_DATE) = ? and UNIT_ID = ? and NOT EXISTS ( select CHECK_ID from check_result_2024 pcr WHERE pcr.CHECK_DATE between DATE_SUB(cr.CHECK_DATE, INTERVAL 4 MONTH) and DATE_SUB(cr.CHECK_DATE , INTERVAL 1 DAY) and cr.VIN = pcr.VIN and UNIT_ID = ? )
### Cause: java.sql.SQLTimeoutException: Query execution was interrupted

这里给出我的解决办法:

 这上面处理完了之后还是出现了该报错,然后我请教前辈

 就解决了,不愧是前辈


http://www.kler.cn/a/305249.html

相关文章:

  • Java - SpringBoot之logback设置日期分割并设置指定时间自动清除,Linux启动运行
  • windows中docker安装redis和redisinsight记录
  • WPS 默认模板修改
  • 系动词、表语和主语补足语
  • dell服务器安装ESXI8
  • 基于springboot+vu的二手车交易系统(全套)
  • 添加选择登录ssh终端
  • RAPIDS AI 加速制造业预测性维护效率
  • 51单片机-蜂鸣器制作音乐(小星星天空之城)
  • 【python因果推断库15】使用 sci-kit learn 模型进行回归断点分析
  • Linux基础-Makefile的编写、以及编写第一个Linux程序:进度条(模拟在 方便下载的同时,更新图形化界面)
  • ubuntu 22.04 ~24.04 如何修改登录背景
  • 【JavaScript】LeetCode:707设计链表
  • Python版《天天酷跑+源码》,详细讲解,手把手教学-python游戏开发
  • jmeter设置全局token
  • (180)时序收敛--->(30)时序收敛三十
  • 大模型教程:使用 Milvus、vLLM 和 Llama 3.1 搭建 RAG 应用
  • 怎么让手机ip地址变化?介绍几种实用方法
  • uniapp 微信小程序自定义tabbar层级低于canvas解决方案
  • 见刊丨“GPU池化”术语发布
  • 本地内存和分布式缓存(面试)
  • Python Web 开发中的性能优化策略(二)
  • git 命令---想要更改远程仓库
  • 指针与函数传递
  • C++速通LeetCode简单第12题-二叉树的直径
  • 深度学习-目标检测(四)-Faster R-CNN