在前四篇系列文章中我们完成了RuoYi规范开发、数据权限、第三方集成、定时任务与工作流开发已经可以搭建出功能完整、业务闭环的企业级后台系统。但能跑的系统 ≠ 生产可用系统。在高并发、大数据量、集群部署的生产环境中原生RuoYi存在诸多问题接口响应慢、数据库压力大、重复查询、集群任务重复执行、接口被刷、权限越权、日志泄露等。本篇为系列第五篇聚焦生产环境核心优化与安全加固从缓存实战、SQL优化、性能调优、分布式部署、接口限流、安全防护六个维度提供全套可落地、可上线的生产级方案解决系统卡顿、并发瓶颈、集群冲突、安全漏洞等核心问题。一、RuoYi生产环境常见性能问题盘点未优化的原生RuoYi在业务量上涨后会集中暴露以下问题也是企业项目最核心的性能痛点高频查询接口频繁访问数据库无缓存QPS升高后数据库CPU爆满列表查询未做分页、未加索引大数据量查询超时、接口卡死重复代码查询、重复参数读取接口响应时间居高不下单机部署存在单点故障服务宕机导致系统全线瘫痪集群部署定时任务重复执行产生重复数据、重复对账问题对外开放接口无限流容易被恶意请求刷崩服务原生安全策略薄弱存在XSS、SQL注入、越权访问等潜在漏洞本篇针对性解决以上所有问题全方位完成系统生产级升级。二、Redis缓存高阶实战解决数据库查询瓶颈RuoYi原生集成Redis但多数开发者仅使用基础缓存功能未发挥缓存最大价值。合理的缓存设计可将接口响应速度从数百毫秒压缩至10ms以内大幅降低数据库压力。2.1 框架原生缓存工具类使用规范RuoYi内置 RedisCache 工具类封装了所有常用缓存操作禁止手动注入 RedisTemplate 重复开发统一使用原生工具保证项目标准化。核心常用方法实战// 存入缓存默认永久 redisCache.setCacheObject(key, value);// 存入缓存指定过期时间5分钟 redisCache.setCacheObject(key, value,5, TimeUnit.MINUTES);// 获取缓存 redisCache.getCacheObject(key);// 删除缓存 redisCache.deleteObject(key);// 批量删除缓存 redisCache.deleteObjects(keys);// 判断缓存是否存在 redisCache.hasKey(key);2.2 企业级缓存落地场景高频必用数据字典缓存系统字典变动频率极低全局缓存避免每次翻译状态都查库系统参数缓存全局配置参数、业务开关缓存后无需频繁读取数据库高频业务数据缓存分类数据、区域数据、固定配置数据验证码、限流计数缓存短信、图形验证码、接口限流计数器登录用户信息缓存框架原生已实现缓存登录用户权限、角色信息2.3 缓存三大核心问题解决方案生产必避坑2.3.1 缓存穿透问题查询不存在的数据直接穿透到数据库数据库压力剧增。解决方案空值缓存 布隆过滤器查询为空时缓存空对象设置短期过期时间避免频繁查库。2.3.2 缓存击穿问题热点Key过期瞬间大量请求同时访问数据库。解决方案互斥锁 热点Key永不过期核心热点数据取消过期时间后台定时更新。2.3.3 缓存雪崩问题大量缓存同时过期瞬间请求全部打向数据库。解决方案过期时间随机偏移在原有过期时间基础上增加随机秒数避免批量Key同时失效。2.4 缓存更新生产规范统一遵循先更新数据库再删除缓存禁止先改缓存再改数据库避免数据不一致业务数据新增、修改、删除后必须主动清空对应缓存保证数据实时同步。三、SQL优化与接口性能调优绝大多数RuoYi系统卡顿根源并非代码问题而是SQL低效、索引缺失、数据加载不合理。本节讲解零成本、高收益的性能调优方案。3.1 基础强制优化规范所有列表接口强制分页禁止无条件查询全表数据哪怕业务数据量小必须保留分页逻辑适配后期数据增长关键字段必建索引查询条件、排序字段、关联字段dept_id、create_by、status、order_id全部建立索引禁止select *按需查询字段减少数据传输与内存占用避免大事务长事务导致数据库锁等待、超时、死锁拆分复杂事务为独立小事务3.2 大数据量批量处理优化批量导入、批量统计、数据迁移等场景禁止单次加载全量数据采用分批查询、分批处理每次处理1000条避免OOM内存溢出。3.3 日志与冗余代码优化生产环境关闭DEBUG日志减少IO输出删除无用打印、重复查询、冗余判断精简接口执行链路压缩响应耗时。四、RuoYi分布式集群部署方案解决单点故障单机部署存在严重单点故障生产环境必须集群多节点部署。RuoYi天然支持分布式只需简单配置即可实现无缝集群。4.1 集群部署核心改造点统一Redis缓存多节点共享登录态、权限、缓存数据实现登录无感切换统一数据库所有节点连接同一业务数据库保证数据一致性开启Quartz集群锁解决定时任务多节点重复执行问题静态资源统一存储替换本地存储为OSS存储多节点资源访问统一Nginx负载均衡统一入口分发请求至不同服务节点实现高可用4.2 定时任务集群冲突终极解决集群部署最大坑点多节点同时触发定时任务导致重复执行、数据错乱。解决方案开启Quartz数据库集群模式配置如下spring: quartz: job-store-type: jdbc jdbc: initialize-schema: embedded properties: org.quartz.jobStore.isClustered:trueorg.quartz.jobStore.clusterCheckinInterval:1000开启后框架通过数据库锁抢占任务同一时间仅一个节点执行任务彻底解决集群重复调度问题。4.3 集群登录会话共享RuoYi默认基于Redis实现Token与会话共享集群部署无需改造登录逻辑所有节点登录态互通支持负载均衡无感切换。五、接口限流与防刷实战保护服务稳定性对外开放的登录、注册、短信、查询接口极易被恶意刷请求、高频访问导致服务瘫痪。本节实现自定义注解Redis接口限流方案精准控制接口访问频次。5.1 自定义限流注解Target(ElementType.METHOD)Retention(RetentionPolicy.RUNTIME)public interface RateLimit{// 限流时间秒 int time()default60;// 最大请求次数 int count()default10;// 限流提示语 String msg()default请求过于频繁请稍后再试;}5.2 AOP限流拦截核心逻辑通过AOP切面拦截注解接口基于IP接口路径生成唯一Key统计单位时间内请求次数超出阈值直接拦截返回限流提示。5.3 业务场景适配短信接口60秒仅允许1次请求杜绝恶意刷短信登录接口1分钟5次请求防止暴力破解密码公开查询接口限制高频请求保护服务六、系统全方位安全加固生产必备原生RuoYi安全机制仅满足基础使用生产环境需全方位加固杜绝XSS攻击、SQL注入、越权访问、信息泄露等安全隐患。6.1 账号安全加固开启密码重试锁定多次密码错误锁定账号防止暴力破解开启单点登录同一账号仅允许一端在线挤退旧会话密码加密存储禁止明文、弱密码强制密码复杂度规则闲置Token自动过期缩短Token有效期提升安全性6.2 接口安全加固统一参数校验过滤特殊字符防止XSS脚本注入MyBatis参数预编译杜绝SQL注入漏洞所有接口统一权限校验、数据权限校验杜绝横向越权、纵向越权关闭生产环境错误堆栈信息展示避免代码结构泄露6.3 文件上传安全加固限制上传文件类型、大小禁止上传exe、jar、php、jsp等脚本文件文件重命名存储避免恶意文件名执行脚本上传文件独立域名、OSS存储与业务服务隔离6.4 日志安全规范禁止打印密码、密钥、短信验证码、用户隐私信息操作日志、登录日志完整留存便于安全审计与问题排查定期归档日志防止日志泄露、磁盘爆满七、生产环境最佳实践汇总缓存优先高频查询、静态配置全部缓存减少数据库IO压力SQL极简强制分页、建索引、按需查字段杜绝低效查询集群高可用多节点部署负载均衡消除单点故障任务防重开启Quartz集群锁保障定时任务唯一执行接口限流核心公开接口全部添加限流规则防止恶意请求安全兜底账号、接口、文件、日志全方位加固消除安全漏洞八、系列终章总结本篇作为RuoYi二次开发系列核心收尾篇从性能、架构、安全、高可用四个维度完成了系统从「可用」到「生产稳定可用」的全面升级。整套系列教程覆盖开发规范→权限体系→第三方集成→自动化任务→工作流审批→性能优化→分布式部署→安全加固完整覆盖企业RuoYi项目从0到1落地、从基础CRUD到高并发复杂系统的全流程开发能力完全适配职场实战、项目交付、企业开发所有场景。九、后续拓展预告后续将持续更新系列番外篇RuoYi-Vue3新版适配、微服务改造RuoYi-Cloud、自定义大屏可视化、代码生成器定制、接口文档自动化等进阶内容持续拓展RuoYi全场景开发能力。