当前位置: 首页 > news >正文

接口优化常用思路

空间换时间

计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题,我们就有了解决问题的第1招–以空间换时间
合理使用缓存就是一个很好的例子,针对一些频繁使用且不频繁变更的数据,可以提前缓存起来,需要时直接查缓存,避免频繁地查询数据库或者重复计算。这里的缓存形式多样,可以是R2M,也可以是本地缓存、memcached、Map、…
需要注意的事,这里用了合理二字,因为空间换时间也是一把双刃剑,需要综合考虑你的使用场景,毕竟缓存带来的数据一致性问题也挺令人头疼。

串行改并行

串行就是,当前执行逻辑必须等上一个执行逻辑结束之后才执行,并行就是两个执行逻辑同时进行,所以并行相对来说就比较节省时间,当然,这种方式的前提是多个步骤间没有相互依赖。实现方式方式如:多线程、协程、…

批处理

总所周知,I/O耗时是影响接口响应速度的重量级嘉宾。这时候批量思想就显得尤为重要。比如你需要查询10个用户的爱好,你应该是一次查询这些用户的所有爱好,再按照用户分类。任何在循环中执行的CRUD都值得高度警惕

异步

对于当前接口返回结果没有影响的逻辑块,我们可以考虑异步执行,这也是解耦思想的体现。如:MQ、协程、…
但并不是说异步越多越好,与之相伴的逻辑复杂度上升可能会导致排查问题难度增加,另外可能引起的数据时序混乱、数据延时,如何保证数据一致性等也是令人头疼的问题

预处理

就是把可能要用到的数据,提前计算/处理好结果并存储下来,要用时只需要直接查询即可,而不是要用时才去计算。这种思想生活中随处可见,比如夏天即将来临,工厂都会提前多生产一些短裙、短袖,而不是等用户下单后才开始生产
值得一提的是,预处理出来的数据可能存在时效性问题,所以这种方法更适用于那种变化不频繁、实时性要求不那么高的场景

池化思想

池化思想的本质是预分配。预先将资源和连接申请到手,使用时即拿即用,节约了资源创建/销毁占用的时间。比如常见的线程池、内存池、连接池、…

上下文传递

由于分支交叉和多人协作,不可避免的出现多次查询同一资源的问题。我们可以只查询一次,通过上下文的方式往下携带,避免多次查询的开销

最简思想

这常常是最容易让人忽略的细节。很多时候实际需要三五个字段,而接口编写者为了方便,直接一股脑儿返回几十上百个字段。增加I/O开销和带宽消耗
在编写接口的途中,我们应该时刻记得:非必要不查,非必要不返。

SQL治理

~待续

http://www.lryc.cn/news/38868.html

相关文章:

  • 【SpringCloud】SpringCloud面试题整理
  • 一些数据库知识点总结
  • Python unittest 模块
  • Spring - Spring IoC 容器相关面试题总结
  • 顺序表来喏!!!
  • 【H2实践】之 SpringBoot 与 H2 数据交互
  • LeetCode 424. Longest Repeating Character Replacement
  • 建立自己的博客(记录-不推荐)
  • hashmap存储方式 hash碰撞及其解决方式
  • Amazon GuardDuty 的新增功能 – Amazon EBS 卷的恶意软件检测
  • YOLOv7 pytorch
  • JDK自带JVM分析工具
  • IO多路复用--[select | poll | epoll | Reactor]
  • pod的requests、limits解读、LimitRange资源配额、Qos服务质量等级、资源配额管理 Resource Quotas
  • R语言基础(六):函数
  • [C++] 简单序列化
  • Autosar Configuration(十三)SomeIP之配置TCP/IP
  • 滤波算法 | 无迹卡尔曼滤波(UKF)算法及其Python实现
  • IMU 积分的误差状态空间方程推导
  • VirtualBox的克隆与复制
  • 每天5分钟玩转机器学习算法:逆向概率的问题是什么?贝叶斯公式是如何解决的?
  • 游戏闲聊之游戏是怎么赚钱的
  • Redis高频面试题汇总(下)
  • Windows修改Docker安装目录修改Docker镜像目录,镜像默认存储位置存放到其它盘
  • 376. 摆动序列——【Leetcode每日刷题】
  • mgre实验
  • 一文彻底了解Zookeeper(介绍篇)
  • 1. ELK Stack 理论篇之什么是ELK Stack?
  • 两道有关链表的练习
  • Python uiautomator2安卓自动化测试