当前位置: 首页 > 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 协议)
  • AI世界的年轻人|与总书记交流过的“00后”,渴望紧握时代赋予的接力棒
  • 安徽六安特色产品将“组团”入沪,借力五五购物节开拓市场
  • 贵州赤水丹霞大瀑布附近山体塌方车辆被埋,景区:无伤亡,道路已恢复
  • 魔都眼|西岸国际咖啡生活节:连接艺术、音乐与宠物
  • 网警查处编造传播“登顶泰山最高可得3万奖金”网络谣言者
  • 朝鲜海军新型驱逐舰进行首次武器系统测试