公司项目做了一次性能优化,总结一下优化方向。
- 并发 请求多个接口,并发请求
- sql 排查一下耗时的sql,优化sql,增加索引等
- redis 循环get改成mget,或者缓存的时候把一组数据缓存到一起,一次ing获取
- 增加缓存 准确性或者实时性要求不高的数据可以从换从中获取,减少接口和数据库访问
- 深拷贝改成浅拷贝或者直接使用原对象,因为现在项目不会修改入参,所以改成直接用原对象
- 实例复用 有一些实例创建起来比较耗时,能复用尽量复有,特别是在循环里。例如正则Pattern ,时间SimpleDateFormat,xmlJAXBContext等
- 异步处理和主流程无关的内容,例如查询酒店是主流程,把酒店信息缓存到redis是无关主流程的,可以放到其他线程执行。
- 两个大的list,存着不同的属性,现在要合并[{id,name},....]和[{id,phone},....]合并成[{id,name,phone},....] (复杂度n*n),最好先把一个list转换成map(复杂度n)
- 大量数据要处理,不要放到jvm(存到list、map中)内存中,之前项目中有存到map中2G的数据,然后处理好几天(还要接口获取其他信息,所以时间较长),这几天服务器都比较慢,而且服务器若是重启还得重新读取这些数据,最好放到数据库中,或者消息队列中。