六‍作者名称:DaenCode 作者简介:CSDN实力新星,后端开发两年经验,曾担任甲方技术代表。会点点Java相关技术栈、帆软报表、低代码平台快速开发。技术尚浅,闭关学习中······ 人生感悟:尝尽人生百味,方知世间冷暖。 所属专栏:项目实战经验

专栏推荐

专门为Redis入门打造的专栏,包含Redis基础知识、基础命令、五大数据类型实战场景、key删除策略、内存淘汰机制、持久化机制、哨兵模式、主从复制、分布式锁等等内容。链接>>>>>>>>>《Redis从头学》SpringBoot实战相关专栏,包含SpringBoot过滤器、拦截器、AOP实现日志、整合Freemaker、整合Redis等等实战相关内容,多篇文章登入全站热榜、领域热榜、被技术社区收录。链接>>>>>>《SpringBoot实战》

文章目录

专栏推荐前言异步思想池化思想缓存思想数据库优化组合优化写在最后

前言

身为一个合格的开发者,在系统开发时不仅仅是要考虑功能的实现,还要考虑接口性能以此来提升用户体验、节省硬件成本。本文总结了系统开发中常见的接口性能优化手段。

异步思想

在这之前先介绍一下同步和异步:

同步:用户请求时,逻辑中所有的操作完成之后才返回给用户信息。异步:用户请求时,逻辑中的部分操作可以另辟蹊径去完成,减少用户等待时间。

举个例子,比如说在采集用户日志时,见下图的同步操作:

在此接口经过一系列复杂逻辑操作耗时很长,那么怎么优化呢?是不是经过最后一个逻辑处理就可以响应给用户信息?于是可以采用异步思想的去解决,常见的解决方案据我经验有两类:

编程语言工具:Java中的Future和Callable、CompletableFuture、Spring框架中的@Async。中间件:消息队列中间件。比如说针对上述可以采用kafka进行异步。至于采用何种MQ根据业务需求选择即可。

池化思想

在开发中见识过的比如说对象、连接、线程(统称为资源)都可以进行池化,以此来提升系统资源利用率。在优化时可以接口类型对资源进行池化,我在这里总结了两类:

网络请求:在对接第三方接口时需要发起http请求或者数据库连接,这时候我们可以采用对连接进行池化。比如基于Http实现请求调用常见的有HttpClient、OkHttp、Restemplate,我们可以对其进行池化提升接口性能。IO请求或者CPU操作:接口在涉及IO请求、CPU调度时就可以对内存或者线程进行池化,也就是我们常用的线程池ThreadPoolExecutor、ThreadPoolTaskExecutor(spring中)。

缓存思想

在系统开发中缓存一共有两类:

本地缓存:

HashMap-线程非安全ConcurrentHashMap-线程安全LinkedHashMap-非线程安全MyBatis二级缓存缓存框架:Guava、CaffeineNginx缓存 分布式缓存:

RedisMemcached

注意:在使用分布式缓存时要注意缓存一致性问题。

数据库优化

SQL参数调整

innodb_buffer_pool_size:增大该参数值可以增加InnoDB存储引擎的缓冲池大小,提高查询性能。max_connections:增大该参数值可以增加数据库的最大连接数,以支持更多的并发查询。wait_timeout:减小该参数值可以释放空闲连接的资源,以提高连接的利用率。slow_query_log:启用慢查询日志,以记录执行时间超过阈值的查询语句,便于优化。log_queries_not_using_indexes:启用该参数可以记录未使用索引的查询语句,用于优化查询语句。 索引优化数据库表结构优化SQL语句优化分库分表优化(数据量大)

组合优化

组合优化就是采用上述几种的组合了,或者说可以提高硬件性能。

写在最后

有关于项目接口性能优化方案到此就结束了。感谢大家的阅读,就我目前个人经验而言只能提供这几种思路了,希望有大佬可以在评论区做出补充!

推荐文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。