从卡顿到丝滑:ruoyi-vue-pro性能优化实战指南
你是否遇到过后台管理系统操作卡顿、报表加载缓慢、用户抱怨体验差的问题?作为基于Spring Boot + Vue & Element构建的企业级解决方案,ruoyi-vue-pro提供了完整的性能优化工具箱。本文将通过三个真实场景,带你掌握缓存设计、异步处理、数据库调优三大核心优化手段,让系统响应速度提升5-10倍。
缓存策略:从"查库慢"到"秒响应"
缓存是提升系统性能的第一把利剑。ruoyi-vue-pro基于Redis实现了多级缓存架构,通过注解即可轻松接入。
注解式缓存快速上手
在Service层添加@Cacheable注解即可实现方法级缓存,自动缓存查询结果:
@Service
public class UserServiceImpl implements UserService {
@Cacheable(value = "user", key = "#id")
public UserDO getUserById(Long id) {
return userMapper.selectById(id);
}
}
核心配置文件位于yudao-framework/yudao-spring-boot-starter-redis/src/main/java/cn/iocoder/yudao/framework/redis/config/RedisAutoConfiguration.java,默认提供了合理的缓存过期策略。
缓存更新与失效处理
当数据发生变更时,使用@CacheEvict注解清除相关缓存:
@CacheEvict(value = "user", key = "#user.id")
public boolean updateUser(UserDO user) {
return userMapper.updateById(user) > 0;
}
对于批量操作,可使用allEntries = true清除整个缓存分区:
@CacheEvict(value = "user", allEntries = true)
public void refreshUserCache() {
// 无需实现,仅用于清除缓存
}
异步处理:告别"转圈等待"
长时间运行的任务(如报表生成、文件导出)不应阻塞用户操作。ruoyi-vue-pro提供了完善的异步任务解决方案。
异步方法定义
通过@Async注解将方法标记为异步执行:
@Service
public class ReportServiceImpl implements ReportService {
@Async
public CompletableFuture<byte[]> exportLargeReport(ReportQuery query) {
// 耗时的报表生成逻辑
return CompletableFuture.completedFuture(reportBytes);
}
}
异步任务配置
异步线程池配置位于yudao-framework/yudao-spring-boot-starter-job/src/main/java/cn/iocoder/yudao/framework/job/config/AsyncAutoConfiguration.java,默认配置如下:
@Bean
public Executor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(10); // 核心线程数
executor.setMaxPoolSize(50); // 最大线程数
executor.setQueueCapacity(100); // 队列容量
executor.setKeepAliveSeconds(60); // 空闲线程存活时间
return executor;
}
数据库优化:从"慢查询"到"飞一般"
数据库往往是系统性能的瓶颈,ruoyi-vue-pro提供了多层次的数据库优化方案。
连接池配置优化
数据库连接池配置位于yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/config/MyBatisAutoConfiguration.java,关键参数优化建议:
spring:
datasource:
hikari:
maximum-pool-size: 20 # 最大连接数
minimum-idle: 5 # 最小空闲连接
connection-timeout: 30000 # 连接超时时间(ms)
idle-timeout: 600000 # 空闲超时时间(ms)
索引优化实践
通过@TableIndex注解为MyBatis-Plus实体类添加索引:
@Data
@TableName(value = "sys_user",
indexes = {@TableIndex(columnList = "username", unique = true),
@TableIndex(columnList = "mobile")})
public class SysUserDO extends BaseDO {
// 字段定义...
}
SQL性能监控
ruoyi-vue-pro集成了SQL性能监控功能,慢查询日志会自动记录到日志文件中。可通过调整配置yudao-server/src/main/resources/application-dev.yml设置慢查询阈值:
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
plugin:
performance-interceptor:
enabled: true
max-time: 100 # 慢查询阈值(ms)
性能监控:实时掌握系统状态
为了持续优化系统性能,需要对关键指标进行监控。ruoyi-vue-pro提供了两种监控方式:
Spring Boot Actuator监控
通过访问/actuator/metrics端点可获取系统运行指标,包括:
jvm.memory.used- JVM内存使用情况http.server.requests- HTTP请求统计cache.gets- 缓存命中统计
详细配置见yudao-framework/yudao-spring-boot-starter-monitor/《芋道 Spring Boot 监控端点 Actuator 入门》.md
自定义性能埋点
通过PerformanceUtils工具类对关键业务流程进行埋点:
public class OrderServiceImpl implements OrderService {
public OrderVO createOrder(OrderCreateDTO createDTO) {
PerformanceUtils.start("order_create");
try {
// 订单创建逻辑
return orderVO;
} finally {
PerformanceUtils.end("order_create");
}
}
}
性能数据会自动上报到监控系统,可在管理后台查看系统监控 -> 性能分析页面。
实战案例:从3秒到300毫秒的优化之路
某客户CRM系统在数据量达到10万级后,客户列表加载需要3秒以上。通过以下优化使响应时间降至300ms:
- 添加缓存:缓存热门查询结果
@Cacheable(value = "customer", key = "#query.pageNum + '_' + #query.pageSize")
public PageResult<CustomerVO> getCustomerPage(CustomerQuery query) {
// 原有查询逻辑
}
- 异步加载关联数据:基本信息与详情分离加载
public CustomerDetailVO getCustomerDetail(Long id) {
CustomerVO baseInfo = customerMapper.selectById(id);
// 异步加载关联数据
CompletableFuture.runAsync(() -> {
baseInfo.setOrders(orderService.getRecentOrders(id));
baseInfo.setContacts(contactService.getContacts(id));
});
return baseInfo;
}
- SQL优化:添加复合索引并优化查询
-- 添加复合索引
CREATE INDEX idx_customer_create_time ON customer(create_time, company_id);
-- 优化查询,只查询需要的字段
SELECT id, name, mobile, create_time FROM customer
WHERE company_id = ? ORDER BY create_time DESC LIMIT ?, ?
通过以上三步优化,客户列表加载时间从3秒缩短至300毫秒,用户体验得到显著提升。
总结与最佳实践
性能优化是一个持续迭代的过程,建议遵循以下最佳实践:
- 先测量后优化:基于监控数据确定瓶颈,而非凭感觉
- 缓存策略:热点数据缓存、读写分离、缓存预热
- 异步处理:非实时任务异步化,避免用户等待
- 数据库优化:合理索引、分页优化、避免全表扫描
- 定期review:每季度进行一次性能评审
ruoyi-vue-pro提供了完善的性能优化基础设施,开发人员只需关注业务逻辑,即可轻松构建高性能应用。更多性能优化技巧,请参考官方文档yudao-framework/yudao-common/《芋道 Spring Boot 性能优化指南》.md。
通过本文介绍的优化手段,你可以让系统响应更快、用户满意度更高,为业务增长提供有力支撑。现在就动手优化你的系统吧!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



