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

Springboot分布式项目优化策略

目录

调优概念

http接口响应时间优化

http发送时间优化:

服务器处理时间优化:

(1)、具体分析业务逻辑来看哪些地方可以优化

(2)、减少IO次数和循环调用

(3)、拆分业务,采用异步形式

(4)、底层优化


调优概念

 调优是对系统性能进行优化的过程,可以提高系统的效率和稳定性。调优一般都是都是针对接口而言,比如http接口,dubbo接口等;一定是针对业务来的。

http接口响应时间优化

HTTP 接口的响应时间包括以下三个方面:

  1. HTTP 发送时间:指客户端发送请求到服务器的时间。

  2. 服务器处理时间:指服务器处理请求的时间,主要包括数据库查询、逻辑处理等。

  3. 服务器传输参数时间:指服务器将处理后的参数返回到客户端的时间。

实例:

http发送时间优化:

        在实际开发中,我们通常会使用实体类来传递参数,但是有些字段是无用的,这样会导致传递了无用的参数,从而降低系统性能。此时,我们可以定义一个新的类来接收参数,避免传递无用的参数。例如,例如在 Spring Boot 中定义 Param 和 VO 两个类,一个用于接收参数,一个用于输出结果。

服务器处理时间优化:

(1)、具体分析业务逻辑来看哪些地方可以优化

例如,在批量插入时,可以采用以下三种方式进行优化:

①.利用 for 循环进行操作:

for(int i = 0; i < list.size(); i++) {
    userMapper.insert(list.get(i));
}

②. 在 Mapper.xml 中利用 foreach 进行操作:

<foreach collection="list" item="item" index="index" separator=";">
    insert into user value(#{item.id}, #{item.name}, #{item.age})
</foreach>

③. 采用 sqlSession 去封装的批量插入:(性能最好)

SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false);
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
for(int i = 0; i < list.size(); i++) {
    mapper.insert(list.get(i));
    if (i != 0 && i % 1000 == 0) {
        sqlSession.flushStatements();
    }
}
sqlSession.flushStatements();
sqlSession.commit();
sqlSession.clearCache();

(2)、减少IO次数和循环调用

        当进行批量操作时,牢记减少IO次数可以显著提升系统性能。同时,应该避免循环调用其他服务,除非绝对必要。

(3)、拆分业务,采用异步形式

        对于复杂的业务逻辑,将其拆分成独立的模块,采用异步方式执行可以在保证准确性的情况下提高系统效率。这种模式可以避免阻塞线程池,从而提高整体系统的性能。

(4)、底层优化

        ①、数据库优化:

        数据库优化可以极大提高系统性能。可以针对特定的查询进行具体优化,例如:避免使用自己写的连表查询,减少多次IO等。此外,使用MyBatis Plus等ORM框架可以大大减少手写SQL的复杂性。

        ②、Redis缓存:

        缓存是优化系统性能的常见手段。使用Redis缓存可以大幅降低读写次数,提高系统的效率。

        ③、引入其他中间件:

        引入其他中间件如ES可以实现更复杂的查询,解决了模糊查询的缺陷。

模糊查询的弊端:比如我的书名为java并发教程,可以根据java查到,也可以根据教程查到,但是根据java教程就查不到了

        同时,将MySQL中的数据同步到ES中,可以有效减少数据库的负载。


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

相关文章:

  • 聚观早报|中国将是ChatGPT主要对手;​iPhone 15将使用USB-C接口
  • Linux 查看进程和线程CPU和内存占用情况
  • 基于Vue的web设计打印方案
  • 登录页面jwt密钥,过滤器,拦截器,异常处理
  • Mysql表索引(介绍篇)
  • Win10分辨率怎么看?2种必须学会的方法!
  • SOLIDWORKS Electrical无缝集成电气和机械设计
  • 【消息队列】Kafka请求如何被处理的
  • 高数三重积分+离散二元关系+线代矩阵解线性方程
  • 2023-04-04 2016天梯赛决赛练习题L2
  • Let‘s Learn .NET|通过 Semantic Kernel .NET SDK 管理你的 OpenAI 项目
  • MySQL-----复合查询
  • FPGA 20个例程篇:20.USB2.0/RS232/LAN控制并行DAC输出任意频率正弦波、梯形波、三角波、方波(五)
  • 汇编语言(第3版) - 学习笔记 - 实验8 分析一个奇怪的程序
  • 杭州云降价只是敲锣
  • ​力扣解法汇总2418. 按身高排序
  • 总结831
  • 软件测试必备的Linux知识(一)
  • 本地缓存解决方案Caffeine | Spring Cloud 38
  • 从0搭建Vue3组件库(六):前端流程化控制工具gulp的使用