前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >后端接口性能优化“小妙招”

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

作者头像
老九君
发布2022-09-06 13:41:14
8580
发布2022-09-06 13:41:14
举报
文章被收录于专栏:老九学堂

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

01 

【善于使用异步编程】

  • 利用多线程实现异步

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

  • 使用Mq中间件实现异步

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

02 

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

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

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

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

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

03 

【避免大事务】

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

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

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

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

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

  • 如何解决大事务问题?

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

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

TransactionTemplate的简单使用:

代码语言:javascript
复制
@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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis®
腾讯云数据库 Redis®(TencentDB for Redis®)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档