从3s到25ms!看看人家的接口优化技巧,确实很优雅!! 下

简介: 从3s到25ms!看看人家的接口优化技巧,确实很优雅!! 下

7.索引

加索引能大大提高数据查询效率,这个在接口设计之出也会考虑到,这里不再多赘述,随着需求的迭代,我们重点整理一下索引不生效的一些场景,希望对小伙伴们有所帮助。

具体不生效场景不再一一举例,后面有时间的话,单独整理一下。

8.避免大事务

所谓大事务问题,就是运行时间较长的事务, 由于事务一致不提交,会导致数据库连接被占用,影响到别的请求访问数据库,影响别的接口性能。

举个例子:

    @Transactional(value = "taskTransactionManager", propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED, rollbackFor = {RuntimeException.class, Exception.class})
    public BasicResult purchaseRequest(PurchaseRecord record) {
        BasicResult result = new BasicResult();
        ...
        pushRpc.doPush(record);        
        result.setInfo(ResultInfoEnum.SUCCESS);
        return result;
    }

所以为避免大事务问题,我们可以通过以下方案规避:

1,RPC调用不放到事务里面

2,查询操作尽量放到事务之外

3,事务中避免处理太多数据

9.优化程序结构

程序结构问题一般出现在多次需求迭代后,代码叠加形成。会造成一些重复查询、多次创建对象等耗时问题。在多人维护一个项目时比较多见。解决起来也比较简单,我们需要针对接口整体做重构,评估每个代码块的作用和用途,调整执行顺序。

10.深分页问题

深分页问题比较常见,分页我们一般最先想到的就是 limit ,为什么会慢,我们可以看下这个SQL:

  select * from purchase_record where productCode = 'PA9044' and status=4 and id > 100000 limit 200

这样优化的好处是命中了主键索引,无论多少页,性能都还不错,但是局限性是需要一个连续自增的字段

11.SQL优化

sql优化能大幅提高接口的查询性能,由于本文重点讲述接口优化的方案,具体sql优化不再一一列举,小伙伴们可以结合索引、分页、等关注点考虑优化方案。

12.锁粒度避免过粗

锁一般是为了在高并发场景下保护共享资源采用的一种手段,但是如果锁的粒度太粗,会很影响接口性能。

关于锁粒度:就是你要锁的范围有多大,不管是synchronized还是redis分布式锁,只需要在临界资源处加锁即可,不涉及共享资源的,不必要加锁,就好比你要上卫生间,只需要把卫生间的门锁上就可以,不需要把客厅的门也锁上。

错误的加锁方式:

       //非共享资源
        private void notShare(){
        }
        //共享资源
        private void share(){
        }
        private int right(){
            notShare();
            synchronized (this) {
                share();
            }
        }

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

三、最后

接口性能问题形成的原因思考

我相信很多接口的效率问题不是一朝一夕形成的,在需求迭代的过程中,为了需求快速上线,采取直接累加代码的方式去实现功能,这样会造成以上这些接口性能问题。

变换思路,更高一级思考问题,站在接口设计者的角度去开发需求,会避免很多这样的问题,也是降本增效的一种行之有效的方式。

以上,共勉!




相关文章
|
4月前
|
数据采集 自然语言处理 监控
你的模型真的“学”会了吗?微调效果评估实战指南
本文系统讲解大模型微调效果评估的核心方法论:强调评估比训练更重要,涵盖目标对齐、技术指标(Loss/PPL/BLEU/ROUGE)、人工评估四维度、业务验证(A/B测试、端到端场景)、泛化性检验及四步实战流程,并提供避坑指南与工具建议。重在目标驱动、多层验证、快速闭环。(239字)
477 1
|
2月前
|
人工智能 测试技术 API
多模型时代的API接入层怎么设计:从直连到147AI统一入口
多模型已成现实需求。单模型难覆盖长文档、代码、多模态等多样任务,系统正从直连转向统一接入层。147AI 提供 OpenAI 兼容的轻量级统一入口,屏蔽厂商差异,支持成本管控与平滑扩展,是国产团队落地多模型架构的务实起点。
|
3月前
|
JSON 安全 API
咸鱼平台商品详情API接口技术详解
咸鱼(Xianyu)是阿里巴巴旗下二手交易平台,提供商品详情API,支持通过商品ID获取标题、价格、描述、图片等信息。本文详解RESTful调用方法、参数说明、JSON响应格式、Python代码示例及错误处理与安全规范,助力开发者高效集成。(239字)
|
10月前
|
缓存 前端开发 Java
基于最新 Java 技术栈的在线任务管理系统开发实战详解
本项目基于最新Java技术栈开发在线任务管理系统,涵盖任务创建、分配、跟踪、统计等功能。采用Spring Boot 3.2.x、React 18、PostgreSQL 16等主流技术,详解项目架构设计、核心功能实现及部署流程,助力掌握现代Java全栈开发技能。
512 6
|
5月前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库MySQL和PostgreSQL全解析:兼容性、性能、费用价格及稳定可靠性深度测评
阿里云PolarDB是Gartner连续6年认证的全球云数据库领导者,100%兼容MySQL/PostgreSQL/Oracle,交易性能提升6倍、分析性能提升400倍、TCO降低50%,支持HTAP、Serverless弹性与99.995%高可用,已服务富友支付、小鹏汽车等头部企业。
632 8
|
12月前
|
安全 网络安全 网络虚拟化
配置总部采用冗余网关与分支建立IPSec隧道示例
本文介绍了企业总部与分支间通过公网通信的组网需求及配置思路。为提高可靠性,分支网关AR5可接入两台总部网关(AR2和AR3),并建立IPSec隧道保障通信安全。配置步骤包括:1) 配置接口IP地址与静态路由;2) 定义ACL保护数据流;3) 创建IPSec安全提议;4) 配置IKE对等体;5) 创建安全策略;6) 在接口应用安全策略组。最终通过ping测试与查看隧道状态验证配置结果,确保流量安全传输。
配置总部采用冗余网关与分支建立IPSec隧道示例
|
7月前
|
网络协议 数据安全/隐私保护 网络架构
|
10月前
|
传感器 人工智能 运维
RFID巡检技术让铁路运行畅通无阻
RFID技术在铁路巡检中实现设备智能识别与数据实时上传,提升巡检效率50%以上,降低漏检率至0.1%以下。通过自动记录设备状态、预防性维护与AI分析,增强安全性并降低运维成本,广泛应用于轨道、机车维护及应急响应,推动铁路巡检从“人防”向“技防”升级。
|
Web App开发 移动开发 前端开发
React 视频播放器样式自定义实战指南
本文详细介绍了如何在React项目中实现视频播放器的样式自定义,涵盖HTML5 `<video>`标签的基础知识、CSS样式定制技巧及常见问题解决方案。针对全屏模式样式失效、移动端触摸事件冲突和进度条样式定制等问题提供了具体代码示例。同时,探讨了视频预加载策略和内存优化方法,并推荐了几款调试工具,帮助开发者提升用户体验和应用性能。
476 6
|
设计模式 消息中间件 druid
一文读懂Spring动态配置多数据源---源码详细分析 (上)
一文读懂Spring动态配置多数据源---源码详细分析
1745 0
一文读懂Spring动态配置多数据源---源码详细分析 (上)