项目接口性能优化方案

news2025/1/20 1:53:18

🧑‍💻作者名称: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.coloradmin.cn/o/1339891.html

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

相关文章

论文阅读《Restormer: Efficient Transformer for High-Resolution Image Restoration》

论文地址:https://openaccess.thecvf.com/content/CVPR2022/html/Zamir_Restormer_Efficient_Transformer_for_High-Resolution_Image_Restoration_CVPR_2022_paper.html 源码地址:https://github.com/swz30/Restormer 概述 图像恢复任务旨在从受到各种扰动(噪声、模糊、雨滴…

低延时视频技术的应用场景和挑战

编者按 无线网络对人们的生活产生了巨大的影响,而5G技术的引入将彻底改变我们与世界互联互通的方式。在5G时代,实现万物互联离不开低延时技术的应用。 LiveVideoStackCon 2023 深圳站邀请到秒点科技的CEO扶凯,为大家分享低延时技术在物联网、…

家政行业的小程序都需要具备哪些功能?

家政服务小程序,覆盖多城,在线派单 适合行业:家电维修、家政保洁、养生护理、美容美发、预约服务上门等 系统功能:服务管理、商品管理、拼团/秒杀、订单管理、会员管理、派单管理、师傅管理、商家/服务点、财务管理、城市代理、次…

Python算法例30 统计前面比自己小的数

1. 问题描述 给定一个整数数组(数组大小为n,元素的取值范围为0~10000),对于数组中的每个元素,计算其前面元素中比它小的元素数量。 2. 问题示例 对于数组[1,2,7,8,5]&…

分享44个PyQt5源码总有一个是你想要的

分享44个PyQt5源码总有一个是你想要的 学习知识费力气,收集整理更不易。 知识付费甚欢喜,为咱码农谋福利。 链接:https://pan.baidu.com/s/1_5H_0Ydg0XUa1fz5Jok51Q?pwd6666 提取码:6666 项目名称 B站直播弹幕姬&#xff…

快速、安全、高效地传输海量小文件

随着互联网技术的不断进步,我们正迈入信息爆炸的时代。在这个时代,企业每天都需要在互联网上传输海量的小文件。与传输常见的大文件相比,海量小文件的传输变得更加困难。接下来,我们将分析海量小文件传输面临的挑战,并…

云原生机器学习平台cube-studio开源项目及代码简要介绍

1. cube-studio介绍 云原生机器学习平台cube-studio介绍:https://juejin.cn/column/7084516480871563272 cube-studio是开源的云原生机器学习平台,目前包含特征平台,支持在/离线特征;数据源管理,支持结构数据和媒体标…

Modbus RTU转Modbus TCP模块,RS232/485转以太网模块,YL102 多功能串口服务器模块

特点: ● Modbus RTU协议自动转换成Mobus TCP协议 ● 100M高速网卡,10/100M 自适应以太网接口 ● 支持 AUTO MDI/MDIX,可使用交叉网线或平行网线连接 ● RS232波特率从300到256000可设置 ● 工作方式可选择TCP Server, TCP Client, U…

中间件系列 - Redis入门到实战(原理篇)

前言 学习视频: 黑马程序员Redis入门到实战教程,深度透析redis底层原理redis分布式锁企业解决方案黑马点评实战项目 中间件系列 - Redis入门到实战 本内容仅用于个人学习笔记,如有侵扰,联系删除 学习目标 Redis数据结构Redis网…

企业员工2024年工作计划和目标怎么写?怎么提醒自己按时执行?

2024年的钟声即将敲响,对于众多企业员工而言,新的一年意味着新的挑战和机遇。而在这之前,制定一份明确的2024年工作计划与目标就显得尤为重要。但不少员工在面对这个任务时,往往感到无从下手,那么如何撰写一份实用且有…

pyCharm 打印控制台中文乱码解决办法

解决方法 在 "File" -> "Settings" 中的控制台设置: 在 "File" -> "Settings" 中,你可以找到 "Editor" -> "General" -> "Console"。在这里,你可能会找到…

frp(实现内网穿透)服务搭建与ssh连接测试

frp 内网穿透 内网穿透的英文叫做NAT traversal,又被称为端口映射或内网映射,内网穿透是网络连接术语,如下图如果我(局域网A中的一台服务器)想访问另一个局域网c中的一台服务器,可以通过拥有公网ip的B服务…

自动备份B站Up主最新视频到百度网盘的Python脚本详解

自动备份B站Up主最新视频脚本详解(Win和Linux有些不同) 前言: 次篇文章启发于某些大胆的UP主(老马)的多次被封,并被下架一些视频。有些人并不能及时观看到,故写一个脚本自动下载最新视频。 &am…

Google Chrome 现在会在后台扫描泄露的密码

谷歌表示,Chrome 安全检查功能将在后台运行,检查网络浏览器中保存的密码是否已被泄露。 如果桌面用户正在使用标记为危险的扩展程序(从 Chrome Web Store 中删除)、最新的 Chrome 版本,或者如果启用安全浏览来阻止 Go…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之线性布局容器Row组件

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之线性布局容器Row组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Row组件 沿水平方向布局容器。 子组件 可以包含子组件。 接口 Row(…

【代码随想录】刷题笔记Day41

前言 早上的时间对我来说太重要了,效率很高,感觉是高中养成的习惯,但是就是睡太晚了,早上只有区区两个消失,感觉不够用啊,希望之后可以早点睡和早点起吧,就像大佬说的,人的身体是有…

外贸网站建站怎么做?海洋建站有哪些步骤?

外贸网站建站需要哪些资料?如何选择外贸建站系统? 外贸企业越来越重视在线业务,而拥有一个专业、高效的外贸网站已经成为成功开展国际贸易的关键一步。海洋建站将为您详细介绍如何进行外贸网站建站,让您的企业在全球市场中脱颖而…

[排序算法]:归并排序(Merge Sort)

概念: 归并排序,是创建在归并操作上的一种有效的排序算法。算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。归并排序思路简单,速度仅次于快速排序,为稳定排序算法…

python的二分查找库bisect,可用于简化繁琐的if条件分支

if条件分支的函数 之前实现了一个函数功能&#xff0c;大意是根据不同的时间天数&#xff0c;返回不同的值。 def analyse_value(days_num:int):if days_num 1:value RD1delif days_num > 1 and days_num < 7:value RD7delif days_num > 7 and days_num < 14:…

Flink1.17实战教程(第三篇:时间和窗口)

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