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

Spring AOP优化in查询,性能提升巨大

在项目中,经常会出现in查询条件过多,导致慢查询,而分批是我们常见的做法,分批的写法基本是固定的,这意味着我们需要经常写重复的代码,因此,考虑如果能通过AOP+注解实现自动分批,那么对于开发效率会有大大滴提升。

AOP自动分页使用展示

在看具体的代码之前,我们先来看一下,使用AOP实现自动分页后的代码长什么样。

下面是未使用aop进行分页的代码,简单来说,

  1. 首先会判断spuIds的数量是不是超过一定的阈值,如果没超过的话,就不需要分页直接查询(这个阈值时可以配置的,方便压测的时候随时调整分批大小,这里我用的是美团的lion配置)
  2. 如果超过阈值后,进行分批,然后使用多线程并行查询(同样的,这里的分批也是可配置的)
  3. 最终将所有的查询结果返回
public List<SimpleSpuTO> batchQuerySpuDetailByRelationIds(List<Long> spuIds) {if (CollectionUtils.isEmpty(spuIds)) {return Lists.newArrayList();}if (spuIds.size() <= MccUtils.getQuerySpuDetailByRelationIdSize()) {ApiQuerySpuReq apiQuerySpuReq = buildQuerySpuReq(spuIds);return querySpuDetailById(apiQuerySpuReq);}List<SimpleSpuTO> resultList = Lists.newArrayList();//异步分批查询List<Future<List<SimpleSpuTO>>> futures = Lists.newArrayList();List<List<Long>> partition = Lists.partition(spuIds, MccUtils.getQuerySpuDetailByRelationIdSize());for (List<Long> ids : partition) {ApiQuerySpuReq apiQuerySpuReq = buildQuerySpuReq(ids);Future<List<SimpleSpuTO>> future =BATCH_SYNC_QUERY_SPU_POOL.submit(() -> querySpuDetailById(apiQuerySpuReq));futures.add(future);}for (Future<List<SimpleSpuTO>> future : futures) {try {resultList.addAll(future.get());} catch (Exception e) {log.error("batchQuerySpuDetailByRelationIds error", e);}}return resultList;}

接下来看下使用AOP改造后的代码:

 @BatchQuery(thresholdLionKey = "querySpuDetailByRelationIdSize",  batchSizeLionKey = "querySpuDetailByRelationIdSize", executor = "batchSyncQuerySpuPool")</

相关文章:

  • Unreal如何使用后处理材质实现一个黑屏渐变效果
  • Linux常见指令介绍中(入门级)
  • VSCode远程图形化GDB
  • 【React】获取元素距离页面顶部的距离
  • 多维度信息捕捉:利用向量、稀疏向量、全文搜索及张量实现RAG的极致性能
  • 随机面试--<二>
  • 可穿戴无线生理信号采集贴片产品市场需求简析
  • DevOps功能详解
  • 第 3 篇:揭秘时间模式 - 时间序列分解
  • 【显卡占用】kill程序后,显卡仍被占用
  • 高效Java面试题(附答案)
  • 【C++篇】string类的终章:深浅拷贝 + 模拟实现string类的深度解析(附源码)
  • uCOS3实时操作系统(系统初始化和任务启动)
  • 《Learning Langchain》阅读笔记5-RAG(1)
  • 7. 服务通信 ---- 使用自定义srv,服务方和客户方cpp,python文件编写
  • MATLAB 训练CNN模型 yolo v4
  • 强化学习框架verl源码学习-快速上手之如何跑通PPO算法
  • Linux学习笔记协议篇(六):SPI FLASH设备驱动
  • 嵌入式人工智能应用-第三章 opencv操作8 图像特征之HOG 特征
  • 网络原理 - 3(UDP 协议)
  • 大家聊中国式现代化|权衡:在推进中国式现代化中当好龙头
  • 中汽协:杜绝虚假宣传与过度营销,确保用户清晰区别驾驶辅助与自动驾驶
  • 盗播热门影视剧、电影被追究刑事附带民事责任,最高法发声
  • 世界史圆桌|16-18世纪的跨太平洋贸易
  • “代课老师被男友杀害案”一审开庭,将择期宣判
  • 罗马教皇方济各去世,享年88岁