接口性能优化的几种思路
  noV1ShQ2SDxJ 2023年12月08日 22 0

一、sql优化

接口执行慢,很大一部分原因是因为未加索引,或者索引失效。

加索引能大大提高数据查询效率,这里不再多赘述,随着需求的迭代,重点整理一下索引不生效的一些场景。

接口性能优化的几种思路_批量

我们可以通过查看sql执行计划来判断sql的索引使用情况。

除索引问题以外还有可能是关联表过多或者子查询过多

单表查询效率 > 关联查询效率 > 子查询效率

查询时关联的表最好不超过3个,如果sql有子查询,尽可能将子查询改为关联查询,如果关联查询过多导致sql查询慢,可以考虑优化表结构。

二、批量思想

主要包括两个方面:

一是批量操作数据库,例如我们在查询数据库时,需要根据id查询一批数据,切记不能一次查询一个id的数据

反例:

List<Student> studentList;

for(Student stu : studentList){
  //数据库查询
	Entity entity = mapper.findById(stu.getId);
}

正例:

List<Student> studentList;

//取id集合
List<Long> idList = studentList.stream.map(Student::getId)
	.collect(Collectors.toList);
  
//数据库查询  
List<Entity> entityList = mapper.findByIdList(idList);

这样做的原因是因为每次查询都会建立一次数据库连接,每次链接都耗时,所以需要批量一次性查询。

二是远程调用也需要批量,与操作数据库类似,每次远程调用都有时间损耗,因此我们需要干掉所有在循环内执行的远程调用,提取到for循环之外,然后利用map将我们需要的数据set到我们需要的位置。


三、异步

有部分接口对sql 以及 业务逻辑 的优化空间有限,不能满足性能标准,我们可以考虑异步,部分场景使用异步也能大大降低接口响应时间。

举个简单例子,我们现在有一个接口需要查询某公司信息 需要调用第三方定位接口(响应时间600ms),获取该公司详细地址,还需要调用第三方财务接口(响应时间450ms),查询该公司财务详情,还需要调用第三方人力接口(响应时间800ms),查询该公司人员规模。

这些查询都是第三方提供的接口,无法对其进行优化,三个查询加一块总共耗时1850ms,像这样的情况,我们可以使用异步,三个查询同时进行,执行完成的时间为三个查询中最长的那个,接口响应时间就是800ms。(本文不详细讲解异步实现方式,只讲优化思维)

四、合理使用缓存

查询缓存是最快的查询方式,合理的使用缓存,能大大提高接口性能,缩减响应时间。我们可以将一些常用的数据放入缓存当中,如本公司基本信息,像公司名称,地址,等等一些不会经常变动的数据放入缓存当中,在我们需要这些数据时,先查缓存,如果缓存中找到我们所需要的内容就无需查询数据库了,也能够缩减响应时间。


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月08日 0

暂无评论

推荐阅读
noV1ShQ2SDxJ
作者其他文章 更多