项目接口性能优化方案

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


在这里插入图片描述


专栏推荐

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

文章目录

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

🌟前言

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


🌟异步思想

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

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

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

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

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

🌟池化思想

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

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

🌟缓存思想

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

  1. 本地缓存:
    • HashMap-线程非安全
    • ConcurrentHashMap-线程安全
    • LinkedHashMap-非线程安全
    • MyBatis二级缓存
    • 缓存框架:Guava、Caffeine
    • Nginx缓存
  2. 分布式缓存:
    • Redis
    • Memcached

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


🌟数据库优化

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

🌟组合优化

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


🌟写在最后

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


请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/581591.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

模拟算法 蓝桥杯备赛系列 acwing

文章目录: 基础知识 什么是模拟? 例题 一、错误票据 1.解题思路 2.代码 二、移动距离 1.解题思路 2.代码 三、航班时间 1.解题思路 2.代码 四、外卖优先级 1.解题思路 2.代码 前面为了目录好看大家就当个玩笑看吧哈哈哈。下面上正文。 正文 基础知识 什…

LeetCode刷题---合并区间

解题思路: 一次遍历,首先按照每个元素区间的start来排序,之后定义一个列表将第一个元素添加进去,依次遍历数组的每个元素,如果第二个元素区间的start小于或者等于第一个元素区间的end,则证明两个区间是重叠…

第27关 在K8s集群上使用Helm3部署最新版本v2.10.0的私有镜像仓库Harbor

------> 课程视频同步分享在今日头条和B站 大家好,我是博哥爱运维。 在前面的几十关里面,博哥在k8s上部署服务一直都是用的docker hub上的公有镜像,对于企业服务来说,有些我们是不想把服务镜像放在公网上面的; 同时…

Jmeter接口工具大全使用—响应断言

断言的作用:一个HTTP请求发出去,怎么判断执行的任务是否成功呢?通过检查服务器响应数据,是否返回预期想要的数据,如果是,判断任务成功,反之任务失败。 1.添加断言 选中一个取样器,…

java基础-回忆性记录

java基础 Java概括 jaava是一种计算机交流的高级编程语言,1995年java衍生,詹姆斯高斯林被世人称之为java之父。 java语言具有跨平台性 java程序并非可以直接运行的,在java程序编译完成后会形成与编译无关的class文件。Java具有跨平台性&a…

智慧监控平台/AI智能视频EasyCVR接口调用编辑通道详细步骤

视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,GB28181视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多路视频流&#xff0c…

Python关键字之旅:一步步掌握Python的奥秘

文章目录 一、前言二、关键字1.总表(共35个)2.拆分2.1 False None True2.2 and not or2.3 as from import2.4 assert2.5 async await2.6 break continue2.7 class def2.8 del2.9 if elif else2.10 try except finally raise2.11 for in while2.12 global…

Vue框架引入Axios

首先已经创建好了 Vue 框架,安装好了 node.js。 没有完成的可按照此博客搭建:搭建Vue项目 之后打开终端,使用命令。 1、命令安装 axios 和 vue-axios npm install axios --save npm install vue-axios --save2、package.json 查看版本 在 p…

06. Springboot admin集成Actuator(二)

目录 1、前言 2、快速使用 2.1、服务端集成 2.1.1、添加依赖 2.1.2、配置启动类 2.1.3、配置application.yml 2.1.4、定制security config 2.1.5、启动程序 2.2、客户端集成 2.2.1、添加依赖 2.2.2、配置application.yml 2.2.3、启动程序 2.3、告警通知 2.3.1、邮…

arr.sort((a,b)=>a-b)

当你需要对一个数组进行正排序和逆向排序的时候,选择arr.sort((a,b)>a-b)方法

【K8S 部署】基于kubeadm搭建Kurbernetes集群

目录 一、基本架构 二、环境准备: 三、安装部署 1、所有节点安装docker 2、、所有节点安装kubeadm,kubelet和kubectl 3、配置网络--flannel 4、测试 pod 资源创建 四、安装部署与k8s集群对接的Harbor仓库 五、Dashboard安装部署: 一、基本架构…

软件测试/测试开发丨Pytest 参数化用例

参数化 通过参数的方式传递数据,从而实现数据和脚本分离。并且可以实现用例的重复生成与执行。 参数化应用场景 测试登录场景 测试登录成功,登录失败(账号错误,密码错误)创建多种账号: 中⽂文账号,英⽂文账号 普通测试用例方法 …

纷享销客华为云:如何让企业多一个选择?

纷享销客携手华为云推出多项联合解决方案,为企业的数字化提供了一个新选择。12月12日,纷享销客&华为云联合解决方案发布会在北京举办。本次发布会以“「CRM云」让企业多一个选择”为主题,来自行业头部企业的CEO、CIO、业务负责人等&#…

AGV智能搬运机器人-替代人工工位让物流行业降本增效

在当今快速发展的世界中,物流业面临着巨大的挑战,包括提高效率、降低成本和优化工作流程。为了应对这些挑战,一种新型的自动化设备——智能搬运机器人正在崭露头角。本文将通过一个具体的案例来展示富唯智能转运机器人在实际应用中的价值。 案…

C++:map和set的介绍及使用

目录 1. 关联式容器 2. 键值对 3. 树形结构的关联式容器 3.1 set 3.1.1 set的介绍 3.1.2 set的使用 3.2 map 3.2.1 map的介绍 3.2.2 map的使用 3.3 multiset 3.3.1 multiset的介绍 3.3.2 multiset的使用 3.4 multimap 3.4.1 multimap的介绍 3.4.2 multimap的使用…

如何安装T4显卡的驱动

文章目录 一、没有驱动的报错现象二、cuda版本与驱动的版本对应关系三、安装驱动方法1:方法2: 一、没有驱动的报错现象 ERROR: Unable to find the kernel source tree for the currently running kernel. Please make sure you have installed the ker…

数字时代跨境电商营销大变革:海外网红营销的力量与影响

随着全球化的推进和数字技术的不断发展,跨境电商行业迎来了一场营销变革的浪潮。在这个过程中,一种新的营销方式崭露头角,那就是海外网红营销。海外网红以其独特的个人魅力和影响力,成为跨境电商推广的重要力量,为品牌…

Flink1.17实战教程(第五篇:状态管理)

系列文章目录 Flink1.17实战教程(第一篇:概念、部署、架构) Flink1.17实战教程(第二篇:DataStream API) Flink1.17实战教程(第三篇:时间和窗口) Flink1.17实战教程&…

设计模式(4)--对象行为(7)--观察者

1. 意图 定义对象间的一种一对多的依赖关系, 当一个对象的状态改变时,所有依赖于它的对象都得到通知并被自动更新。 2. 四种角色 抽象目标(Subject)、具体目标(Concrete Subject)、抽象观察者(Observer)、 具体观察者(Concrete Observer) 3. 优点 3.1 …

模型量化 | Pytorch的模型量化基础

官方网站:Quantization — PyTorch 2.1 documentation Practical Quantization in PyTorch | PyTorch 量化简介 量化是指执行计算和存储的技术 位宽低于浮点精度的张量。量化模型 在张量上执行部分或全部操作,精度降低,而不是 全精度&#xf…