项目接口性能优化方案

🧑‍💻作者名称: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. 分库分表优化(数据量大)

🌟组合优化

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


🌟写在最后

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


请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机组成原理——存储器41-60

67、下列有关RAM和ROM得叙述中正确的是(A )。 I RAM是易失性存储器,ROM是非易失性存储器 II RAM和ROM都是采用随机存取方式进行信息访问 III RAM和ROM都可用做Cache IV RAM和ROM都需要进行刷新 A、 仅I和II B、仅I和III C、仅I ,II, I…

SparkSQL 执行底层原理解析

从Spark SQL 底层架构可以看到,我们写的SQL语句,经过一个优化器(Catalyst)处理,转化为可执行的RDD,提交给集群执行。 SQL到RDD中间经过了一个Catalyst,它便是Spark SQL的核心,是针对…

kubeadm开快速的搭建一个k8s集群

kubeadm开快速的搭建一个k8s集群 二进制适合大集群,50台以上主机 kubeadm更适合中小企业的业务集群。 master节点 20.0.0.92 docker kubelet kubeadm kubectl flannel node1 20.0.0. 94 docker kubelet kubeadm kubectl flanne node2 20.0.0.03 docker kubelet…

【Spring Security】认证之案例的使用、MD5加密、CSRF防御

目录 一、引言 1、什么是SpringSecurity认证 2、为什么使用SpringSecurity之认证 3、实现步骤 二、快速实现(案例) 1、添加依赖 2、配置 3、导入数据表及相关代码 4、创建登录页及首页 5、创建配置Controller 6、用户认证 6.1、用户对象User…

性能测试之脚本、工具、结果分析总结

1、脚本模板 2、 场景模板 性能测试工具选择 1. 数据建模工具 DataFactory是一种强大的数据产生器,它允许开发人员和QA很容易产生百万行有意义的正确的测试数据库,该工具支持DB2、Oracle 、 Sybase、SQL Server数据库,支持ODBC连接方式&#xff0c…

Weblogic任意文件上传漏洞(CVE-2018-2894)

漏洞描述: Weblogic管理端未授权的两个页面存在任意上传jsp文件漏洞,进而获取服务器权限。 Oracle 7月更新中,修复了Weblogic Web Service Test Page中一处任意文件上传漏洞,Web Service Test Page 在 ‘生产模式’ 下默认不开启…

2023 年中国金融级分布式数据库市场报告:TiDB 位列领导者梯队,创新能力与增长指数表现突出

近日,沙利文联合头豹研究院发布了中国数据库系列报告之《2023 年中国金融级分布式数据库市场报告》。 报告认为,金融行业对于分布式数据库信任度与认可度正在逐步提高,中国金融级分布式数据库市场正处于成熟落地的高增长阶段,行业…

【论文阅读+复现】SparseCtrl: Adding Sparse Controls to Text-to-Video Diffusion Models

SparseCtrl:在文本到视频扩散模型中添加稀疏控制。 (AnimateDiff V3,官方版AnimateDiffControlNet,效果很丝滑) code:GitHub - guoyww/AnimateDiff: Official implementation of AnimateDiff. paper:htt…

Grafana Loki 配置解析

Grafana Loki 配置文件是一个YML文件,在Grafana Loki 快速尝鲜的示例中是loki-config.yaml,该文件包含关于Loki 服务和各个组件的配置信息。由于配置数量实在太多,没法全部翻译,只能后期有需要了再补充。 如下是Grafana Loki 快速…

无需手动搜索!轻松创建IntelliJ IDEA快捷方式的Linux教程

轻松创建IntelliJ IDEA快捷方式的Linux教程 一、IntelliJ IDEA简介二、在Linux系统中创建快捷方式的好处三、命令行创建IntelliJ IDEA快捷方式四、图形界面创建IntelliJ IDEA快捷方式五、常见问题总结 一、IntelliJ IDEA简介 IntelliJ IDEA是一个由JetBrains搞的IDE&#xff0…

前端实现websocket类封装

随着Web应用程序的发展,越来越多的人开始利用Websocket技术来构建实时应用程序。Websocket是一种在客户端和服务器之间建立持久连接的协议。这种协议可以在一个单独的连接上实现双向通信。与HTTP请求-响应模型不同,Websocket允许服务器自主地向客户端发送…

17. 电话号码的字母组合中

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 输入:digits "23" 输出&#…

可运营的Leadshop开源商城小程序源码 +H5公众号+带视频教程

源码简介 Leadshop是一款出色的开源电商系统,具备轻量级、高性能的特点,并提供持续更新和迭代服务。该系统采用前后端分离架构(uniappyii2.0),以实现最佳用户体验为目标。 前端部分采用了uni-app、ES6、Vue、Vuex、V…

探究element-ui 2.15.8中<el-input>的keydown事件无效问题

一、问题描述 今天看到一个问题&#xff0c;在用Vue2element-ui 2.15.8开发时&#xff0c;使用input组件绑定keydown事件没有任何效果。 <template><div id"app"><el-input v-model"content" placeholder"请输入" keydown&quo…

docker学习笔记01-安装docker

1.Docker的概述 用Go语言实现的开源应用项目&#xff08;container&#xff09;&#xff1b;克服操作系统的笨重&#xff1b;快速部署&#xff1b;只隔离应用程序的运行时环境但容器之间可以共享同一个操作系统&#xff1b;Docker通过隔离机制&#xff0c;每个容器间是互相隔离…

抬头举手阅读YOLOV8NANO

首先用YOLOV8NANO得到PT模型&#xff0c;转换成ONNX,OPENCV调用&#xff0c;PYTHON,C,ANDROID都可以举手写字阅读YOLOV8NANO

pip 国内镜像源

pip 国内镜像源 部分可用的pip国内镜像源有下面这些&#xff1a; 阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 豆瓣 http://pypi.douban.com/simple Python官方 https://pypi.python.org/simple/ v2ex http://pypi…

uniapp项目如何引用安卓原生aar插件(避坑指南三)

官方文档说明&#xff1a;uni小程序SDK 【彩带- 避坑知识点】 如果引用原生aar插件&#xff0c;都配置好之后&#xff0c;云打包&#xff0c;报不包含此插件&#xff0c;除了检查以下步骤流程外&#xff0c;还要检查一下是否上打包的原生插件aar流程有问题。 1.第一步在uniapp项…

2023年总结以及2024年的计划

2023年总结以及2024年的计划 文章目录 2023年总结以及2024年的计划复盘工作学习爱情旅游北京之旅苏州之游 房子装修投资理财新的一年展望(2024) ​ 今天是2023年12月24日, 星期日, 今年的第358天, 这一年97.81%的时间已流逝. 好像每年的话题都差不多, 2023年 很快就要结束了, 我…

java球队信息管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web球队信息管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5…