一、前言接口速度慢这个问题的严重性就不多说了直接分享下解决方法。首先接口为什么会慢通常来自这几个原因循环查库、N1 查询没有合理使用缓存大对象返回、序列化慢同步执行大量阻塞等待锁粒度太大并发能力低内存占用高频繁 GC二、接口性能优化 10 个实战技巧1. 避免循环查库使用批量查询反例for(Longid:idList){UseruseruserMapper.selectById(id);}正例ListUseruserListuserMapper.selectBatchIds(idList);一条 SQL 搞定减少网络 IO 与数据库连接消耗。2. 使用 join 代替多次查询能一次关联查询搞定绝不分多次查询。业务允许的情况下多表关联比代码里拼装数据快得多。3. 合理使用缓存Redis/Caffeine高频读、低频写 → 加缓存缓存穿透、击穿、雪崩提前兜底缓存更新策略先更新数据库再删缓存简单示例publicUsergetUser(LonguserId){Stringkeyuser:info:userId;// 查缓存UseruserredisTemplate.opsForValue().get(key);if(user!null){returnuser;}// 查库useruserMapper.selectById(userId);if(user!null){redisTemplate.opsForValue().set(key,user,5,TimeUnit.MINUTES);}returnuser;}4. 异步化非核心逻辑异步执行使用Async或线程池异步执行发送短信记录日志消息推送统计数据示例AsyncpublicvoidsendSms(Stringphone){// 发短信逻辑}主线程不用等待直接返回接口速度大幅提升。5. 避免大事务缩小事务范围大事务问题非常致命锁持有时间长并发能力下降容易导致死锁、超时优化非数据库操作不要放在事务里能不事务就不事务查询不要放事务里6. 只查需要的字段不查全部反例select*from user where id#{id}正例select id,username,phone from user where id#{id}减少数据传输、减少内存占用、加快查询速度。7. 合理使用索引慢接口 80% 是没加索引或索引失效。常见索引失效场景使用函数类型隐式转换like ‘%xx’or 连接未索引字段上线前务必用explain看执行计划。8. 减少不必要的日志线上不要大量打印大集合大对象循环日志日志 IO 非常耗性能高并发下会拖慢接口。9. 使用线程池并行执行多任务如果一个接口需要查询用户信息查询订单查询优惠券可以并行查询而不是串行。示例CompletableFutureUseruserFutureCompletableFuture.supplyAsync(()-userService.get(userId));CompletableFutureOrderorderFutureCompletableFuture.supplyAsync(()-orderService.get(orderId));CompletableFuture.allOf(userFuture,orderFuture).join();接口时间从t1 t2变成max(t1,t2)。10. 控制返回对象大小不返回多余字段前端不需要的字段不要返回使用 VO/DTO 分层不用大对象到处传递集合数据限制条数限制分页三、总结接口优化其实就几个核心思路减少数据库交互次数减少阻塞等待能异步就异步减少数据传输量合理利用缓存避免大事务、无效日志、索引失效