Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >后端接口性能优化“小妙招”

后端接口性能优化“小妙招”

作者头像
老九君
发布于 2022-09-06 05:41:14
发布于 2022-09-06 05:41:14
91500
代码可运行
举报
文章被收录于专栏:老九学堂老九学堂
运行总次数:0
代码可运行

学习 JAVA ,就离不开后端,而工作大部分时间我们都是在开发业务接口,那么其性能就尤为重要。如果接口慢,我们应该从哪些方面对接口进行优化呢?

01 

【善于使用异步编程】

  • 利用多线程实现异步

比较推荐用自定义TreadPool来实现多线程,在Java 8及以上的版本,也可以使用CompletableFuture来实现。

现在市面上比较流行的分布式消息中间件有rocketmMq、rabbitMq、kafka等,在Springboot的环境中引入相关的消息中间件也比较简单,这里就不再赘述了。

02 

【数据量大时使用批量与分批操作】

1、在查询数据库的时候我们要尽量避免在for循环中操作数据库,尽量使用批量处理来对数据库进行操作。

在Mybatis中我们可以使用批量处理器来对数据库进行操作,MybatisPlus甚至为我们封装好了批量处理的API

2、避免在for循环中进行rpc调用,尽量使用批量查询。

3、如果操作的数据量很大,那么我们可以进行分批处理,这样可以避免一次交互的数据量过大,从而导致接口响应过慢。

03 

【避免大事务】

  • 大事务会带来什么危害?

1、并发情况下,数据库连接池容易被撑爆

2、锁定太多的数据,造成大量的阻塞和锁超时

3、执行时间长,容易造成主从延迟

4、回滚所需要的时间比较长

  • 如何解决大事务问题?

尽量少使用@Transactional注解,虽然它真的很方便,但是声明式事务很难控制好事务的粒度,推荐使用编程式事务。

Spring提供了TransactionTemplate来帮助我们实现编程式事务。

TransactionTemplate的简单使用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Resource private TransactionTemplate transactionTemplate;        @Test    public void test1(){        transactionTemplate.execute(action->{            //执行数据库事务操作            return null;        });    }

04

【优化SQL慢查询】

  • 导致慢查询的原因

1、关键的字段缺少索引

我们可以根据Explain分析慢SQL,如果没有建立索引的话,创建索引即可。

2、有索引,但是却没有用上索引

我们通过Explain分析慢SQL,发现没有使用到索引,但是发现已经创建了索引,那么这种情况就是索引失效了。

这里举例一些索引失效的一些场景:

①.字段类型不匹配

②.索引列使用了函数

③.like使用了左模糊

④.使用了联合索引,但是却不满足最左匹配原则……

3、SQL比较复杂且慢,但是不好优化

建议利用Java代码逻辑来实现对应的逻辑,复杂的SQL不仅可能导致慢查询,也不利用后期代码的维护工作。

4、数据表数据很多

①.如果旧数据用户访问的比较少,我们可以对数据进行冷热分离

②.对数据进行分库分表

如果表的数据量已经很大了,那么我们可能就需要进行分库分表的处理了。可以使用ShardingJDBC,Mycat等成熟的中间件或者代理来帮助我们完成。

05 

【善于利用缓存】

对于并发比较高的系统,缓存是非常有必要的。我们可以将一些查询较多、但是修改不频繁的数据放入到缓存中,

这样可以帮助我们减少对数据库的访问,不仅可以减轻数据库的压力,而且接口的响应速度也可以得到很大的提升。

  • 使用Redis作分布式缓存

通常我们会利用Redis作为分布式缓存中间件,但是在使用Redis的时候,我们对key的设计要合理,不然出现Big Key,很有可能影响到我们接口的响应速度。

  • 使用Caffeine作为本地缓存

很多时候除了利用Redis做分布式缓存,同时也会做一个本地缓存,减轻redis的压力。这里以caffeine为例,还有很多其他本地缓存的实现。

06

【控制好锁的粒度】

在并发场景下,很多时候我们都需要使用到锁来帮助我们保证数据的安全性,包括像数据的幂等性处理都需要用到锁。

但是如果不管我们使用Sysnchrnoized关键字,jdk的lock锁,还是分布式锁,都需要控制好锁的粒度,如果锁的粒度很大,会影响到我们系统的吞吐量。

阅读原文

了解老九学堂线下高薪就业班详情

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 老九学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
接口性能优化的 15 个技巧
1、业务类,如:产品要做一个红包活动,下周一就要上线,于是研发同学就吭哧吭哧,周末加班不睡觉也要赶出来
微观技术
2022/12/29
6410
接口性能优化的 15 个技巧
后端思想篇:设计好接口的36个锦囊!
大家好,我是捡田螺的小男孩。作为后端开发,不管是什么语言,Java、Go还是C++,其背后的后端思想都是类似的。后面打算出一个后端思想的技术专栏,主要包括后端的一些设计、或者后端规范相关的,希望对大家日常工作有帮助哈。
捡田螺的小男孩
2022/05/23
8360
后端思想篇:设计好接口的36个锦囊!
​场景题:线上接口响应慢,应该如何排查问题?
这是面试中经常问的一个场景题,主要考察研发的过往经验积累,需要系统性地回答,不能笼统简单敷衍。以下是整理的相关内容
卷福同学
2025/03/12
3160
接口性能优化技巧
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/06/07
5110
接口性能优化技巧
如何进行千万级别数据跑批优化
定义:跑批是指在特定日期对大量数据进行定时处理的过程。在金融领域,常见的跑批场景包括分户日结、账务计提、账单逾期处理和不良资产处理等。跑批具有高度的连贯性,通常在执行完跑批后,还需要对数据进行进一步处理,如发送消息队列(MQ)给下游系统,或由数据仓库进行分析等。
用户11397231
2025/06/02
1180
如何进行千万级别数据跑批优化
服务端开发必备:9大性能优化秘技
笔者最近对负责项目做了一些服务性能优化的工作,主要优化了项目中的一些不合理设计,例如:服务间使用 json 传输数据;监控上报处理逻辑在主流程中;重复数据每次都请求下游服务;多个耗时操作串行请求等。取得了 A 服务平均耗时跟 p99 耗时均下降 80% 、事件底层服务平均耗时下降 50% 的业务收益。 本文总结了在服务架构设计时,提升服务性能的 9 大常用办法,相信可以有效帮到你的日常工作。期待你的点赞转发收藏一键三连!
腾讯云开发者
2024/08/06
8890
服务端开发必备:9大性能优化秘技
实战总结!18种接口优化方案的总结
之前工作中,遇到一个504超时问题。原因是因为接口耗时过长,超过nginx配置的10秒。然后 真枪实弹搞了一次接口性能优化,最后接口从11.3s降为170ms。本文将跟小伙伴们分享接口优化的一些通用方案。
捡田螺的小男孩
2022/12/29
1.5K0
实战总结!18种接口优化方案的总结
架构师必知的11种API性能优化方法
接口性能优化是后端开发人员经常碰到的一道面试题,因为它是一个跟开发语言无关的公共问题。
程序员江小北
2024/06/29
3690
架构师必知的11种API性能优化方法
架构必知:后端服务实战之性能优化
优化代码实现是第一位的,特别是一些不合理的复杂实现。如果结合需求能从代码实现的角度,使用更高效的算法或方案实现,进而解决问题,那是最简单有效的。
架构之家
2022/07/12
8140
架构必知:后端服务实战之性能优化
接口链路级性能调优手段
我负责的系统在去年初就完成了功能上的建设,然后开始进入到推广阶段。随着推广的逐步深入,收到了很多好评的同时也收到了很多对性能的吐槽。
周辰晨
2022/09/20
5060
接口链路级性能调优手段
常见性能优化策略的总结
本文要感谢我职级评定过程中的一位评委,他建议把之前所做的各种性能优化的案例和方案加以提炼、总结,以文档的形式沉淀下来,并在内部进行分享。力求达到如下效果: 1. 形成可实践、可借鉴、可参考的各种性能优化的方案以及选型考虑点,同时配合具体的真实案例,其他人遇到相似问题时,不用从零开始。 2. 有助于开阔视野,除了性能优化之外,也能提供通用的常见思路以及方案选型的考虑点,帮助大家培养在方案选型时的意识、思维以及做各种权衡的能力。 文章在内部分享后,引起强烈分享,得到了不少同事和朋友的认可和好评,觉得对日常的工作
美团技术团队
2018/03/12
1.5K0
常见性能优化策略的总结
后端思维之数据库性能优化方案
毫不夸张的说咱们后端工程师,无论在哪家公司,呆在哪个团队,做哪个系统,遇到的第一个让人头疼的问题绝对是数据库性能问题。如果我们有一套成熟的方法论,能让大家快速、准确的去选择出合适的优化方案,我相信能够快速准备解决咱么日常遇到的80%甚至90%的性能问题。
陈珙
2022/05/10
1.3K1
高并发性能优化随笔
在我的高并发技巧系列文章中,我已经介绍了不少性能优化的技巧。为了保证这篇文章的完整性,可能会有一些重复。本文将重点介绍 C 端开发中常用的中间件(MySQL、Redis、MQ、RPC)如何提高性能,并在最后介绍一些奇淫巧技。
用户11397231
2025/01/24
1740
高并发性能优化随笔
接口性能提升方法
1.索引 1.1 没加索引 sql语句中where条件的关键字段,或者order by后面的排序字段,忘了加索引,这个问题在项目中很常见。 项目刚开始的时候,由于表中的数据量小,加不加索引sql查询性能差别不大。 目前在mysql中如果想要修改索引,只能先删除索引,再重新添加新的。
oktokeep
2024/12/10
1560
这才叫 API 接口开发!
写接口看似是一个很简单的事情,但是往往越简单的事情越不容易做好,让我们看看如何写好一个接口。
腾讯云开发者
2025/01/08
5370
这才叫 API 接口开发!
那些高级运维工程师,都是怎么给公司省机器的?
随着项目用户量的快速增长,前期可能由于应用程序设计、数据库设计及架构不当,大多项目会在用户量百万、日志/流水等表过千万、乃至过亿时,出现写入卡顿、查询缓慢、各种业务瘫痪的场景。
CSDN技术头条
2018/07/30
7350
接口性能优化技巧,干掉慢代码!
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/05/06
6160
接口性能优化技巧,干掉慢代码!
哪些问题会引起接口性能问题
所谓的深度分页问题,涉及到 mysql 分页的原理。通常情况下,mysql 的分页是这样写的:
猫头虎
2024/04/08
1810
哪些问题会引起接口性能问题
JAVA代码优化,接口优化,SQL优化 (小技巧)
我们平常可以使用String.format方法拼接url请求参数,日志打印等字符串。
默 语
2024/11/20
3640
JAVA代码优化,接口优化,SQL优化 (小技巧)
聊聊接口性能优化的11个小技巧
接口性能优化对于从事后端开发的同学来说,肯定再熟悉不过了,因为它是一个跟开发语言无关的公共问题。
苏三说技术
2021/11/18
6160
相关推荐
接口性能优化的 15 个技巧
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档