写点什么

面试官偷偷告诉我:原来这样优化提升接口的性能

作者:知识浅谈
  • 2022 年 8 月 15 日
    吉林
  • 本文字数:916 字

    阅读完需:约 3 分钟

面试官偷偷告诉我:原来这样优化提升接口的性能

🍁 作者:知识浅谈,CSDN 签约讲师,CSDN 博客专家,华为云云享专家,阿里云星级博主

📌 擅长领域:全栈工程师、爬虫、ACM 算法

💒 公众号:知识浅谈

🔥 联系方式 vx:zsqtcc


🤞面试官偷偷告诉我:如何优化提升接口的性能🤞


正菜来了⛳⛳⛳

🎈索引优化

  1. 这个接口对应的 sql 是否加了索引

  2. 这个接口对应的 sql 加的索引是否生效

  3. 这个接口对应的 sql 是否选错了索引


  • 使用 explain 进行分析


  explain select * from `table1` where id=1;
复制代码

🎈sql 语句改进

  • 避免使用 select * ,因为网络 IO 和文件 IO 以及回表的原因

  • 小表驱动大表

  • 批量操作,foeach 的多条语句换成 Batch 处理,

  • limit 分页查询,避免查询过多数据

  • 连接查询代替子查询

  • 尽量使用索引

🎈接口中业务并行执行

如需要查询用户信息,积分信息,成长值信息在原来串行的基础上改为并行执行,可以使用多线程的方式执行。


🎈数据缓存优化

对于缓存,我们可以使用多级缓存。


  1. 客户端缓存:使用浏览器缓存 css,js,图片等静态资源

  2. 负载均衡缓存/CDN 缓存:基于 Nginx 的负载均衡节点处进行缓存。

  3. 进程内缓存:如 springmvc 的缓存,mybatis 的一二级缓存,可以使用 Encache,cafein 这些工具。

  4. 分布式缓存:如 redis 缓存。

🎈禁止重复调用

  1. 重复调用 mysqlEg:searchList.forEach(user -> result.add(userMapper.getUserById(user.getId()))); 业务层使用 for 循环与 mysql 数据库频繁交互。改进:可以对语句及进行优化,把 id 的集合放到一起,然后查询优化。

  2. 重复调用缓存和 mysql 一样进行优化即可。

  3. 禁止使用 while(true) 和 递归 ,在某些场景下就可能出现死循环的问题。

🎈异步优化

  1. 使用阻塞/消息队列

  2. 使用线程池

🎈锁的粒度优化

public void test(String a1,String b1,String c1) {    synchronized(this) {          sout(a1);           sout(b1);         sout(c1);     }}
复制代码


优化后


public void test(String a1,String b1,String c1) {    synchronized(this) {          sout(a1);     }    sout(b1);     sout(c1); }
复制代码

🎈分库分表

当用户数量逐渐变多的时候,数据表里存储的数据也越来越多,单表或者单库有可能存不下。由于数据量太大,sql 语句查询数据时,就算是走了索引也会非常耗时就需要分库分表处理了。


🍚总结

上边也是我整理的一些优化的方法,不行了肝不动了,休息了休息了。

发布于: 3 小时前阅读数: 16
用户头像

知识浅谈

关注

公众号:知识浅谈 2022.06.22 加入

🍁 作者:知识浅谈,CSDN签约讲师,CSDN博客专家,华为云云享专家,阿里云社区星级博主 📌 擅长领域:全栈工程师、爬虫、ACM算法 💒 公众号:知识浅谈 🔥 联系方式vx:zsqtcc

评论

发布
暂无评论
面试官偷偷告诉我:原来这样优化提升接口的性能_API_知识浅谈_InfoQ写作社区