笔记来源 公众号--架构师
接口优化方案总结
1.批处理
批量思想:批量操作数据库,这个很好理解,我们在循环插入场景的接口中,可以在批处理执行完成后一次性插入或更新数据库,避免多次IO。
//批量入库 batchInsert();
2.异步处理
异步思想:针对耗时比较长且不是结果必须的逻辑,我们可以考虑放到异步执行,这样能降低接口耗时。至于异步的实现方式,可以用线程池,也可以用消息队列,还可以用一些调度任务框架。
3.空间换时间
合理使用缓存,针对一些频繁使用且不断变更的数据,可以提前缓存起来,需要时直接查缓存,避免频繁的查询数据库或者重复计算。
4.预处理
预取思想,就是提前把查询的数据提前计算好,放入缓存或者表中的某个字段,用的时候会大幅提高接口性能。
5.池化思想
避免重复创建对象或创建连接,可以重复利用,避免不必要的损耗,毕竟创建销毁也会占用时间。池化思想包含但并不局限于以上两种,总的来说池化思想的本质是预分配与循环使用,明白这个原理后,我们即使是在做一些业务场景的需求时,也可以利用起来。
6.串行并改行
串行就是,当前执行逻辑必须等上一个执行逻辑结束之后才执行,并行就是两个执行逻辑互不干扰,所以并行相对来说就比较节省时间,当然是建立在没有结果参数依赖的前提下。
7.索引
加索引能大大提高数据查询效率,但是索引也有不生效的场景
- 隐式类型的转换
- select*
- 对索引进行列运算
- 不满足最左匹配原则
- 使用or关键字
- not in和not exists
- order by和搜索列不匹配的坑
- 使用了<、>、!=
- like以通配符开头
8.避免大事务
所谓大事务问题,就是运行时间较长的事务,由于事务一致不提交,会导致数据库连接被占用,影响到别的请求访问数据库,影响别的接口性能。
可以通过以下方案规避:
1,RPC调用不放到事务里面
2,查询操作尽量放到事务之外
3,事务中避免处理太多数据
9.优化程序结构
程序结构问题一般出现在多次需求迭代后,代码形成叠加。会造成一些重复查询、多次创建对象耗时问题。需要针对接口整体做重构,评估每个代码块的作用和用途,调整执行顺序。
10.深分页问题
常见的就是数据库操作中的limit
可以通过优化命中主键索引的方式进行优化
11.SQL优化
可以大幅提高接口的查询性能
12.锁粒度避免过粗
管是synchronized还是redis分布式锁,只需要在临界资源处加锁即可,不涉及共享资源的,不必要加锁
标签:异步,事务,01,接口,索引,详情页,笔记,缓存,优化 From: https://www.cnblogs.com/cyk612/p/17222089.html