1、批量思想,批量操作
2、异步:耗时操作放到异步执行
3、空间换时间:使用缓存
4、预取:提前初始化到缓存
5、池化:预分配和循环使用
6、事件回调:拒绝阻塞等待
7、远程调用由串行改成并行
8、锁粒度避免过粗
9、切换存储方式:文件中转暂存数据
10、索引
11、优化sql
12、避免大事务
13、优化深分页问题
14、优化程序结构
15、压缩传输内容
16、海量数据处理
17、线程池设计要合理
18、机器是否有full gc 或线程打满问题
实际应用:
我需要做一个展示页面,这个页面涉及的订单号特别多,每个订单号都要查询订单信息,并且需要展示多条内容,每条内容都要拼接并判断逻辑。
一是我使用了预取、异步、批量、远程调用并行、空间换时间、池化、在正式执行判断逻辑前,先将每个订单的订单信息、用户信息、历史信息、以及远程调用其他系统的信息全部通过线程池多线程异步调用,预先准备好,缓存在map里。
将接口从原先的p99 900ms降低到p99 358ms
使用的是completableFuture。
查其他系统每次接口的耗时是p99,每个订单都要调用一次。
二是检查数据库,
查看是否有可改进的sql,无。
但是将查询的从主库改成从库,这只是一个查询的接口没必要用主库。