若依(RuoYi)框架性能核心:Redis 作用与场景全解析

简介: 若依(RuoYi)框架中 Redis 的核心作用、具体应用场景和关键配置逻辑,我会从核心作用分类、实战应用场景、关键配置、优化建议四个维度拆解,覆盖单体版和微服务版的通用逻辑,让你清楚 Redis 在若依中 “做什么、怎么做、怎么优化”

 若依(RuoYi)框架中 Redis 的核心作用、具体应用场景和关键配置逻辑,我会从核心作用分类、实战应用场景、关键配置、优化建议四个维度拆解,覆盖单体版和微服务版的通用逻辑,让你清楚 Redis 在若依中 “做什么、怎么做、怎么优化”。

若依最新前后端分离源码下载:

https://gitee.com/ruoyieleadmin/ruoyi-ele-admin

一、Redis 在若依框架中的核心作用(核心价值)

Redis 作为高性能的内存数据库,是若依框架的核心中间件之一,核心作用可总结为 “提速、解耦、防并发、稳系统”,具体分为四大类:

表格

核心作用 解决的问题 性能 / 稳定性提升效果
缓存热点数据 频繁查询数据库(如字典、菜单、用户信息)导致的性能瓶颈 数据库查询 QPS 降低 80%+,接口响应时间从百毫秒级降至毫秒级
分布式锁 分布式环境下(微服务)并发操作(如订单提交、数据修改)的线程安全问题 杜绝并发导致的数据重复、脏数据问题,成功率 100%
分布式会话共享 多实例部署时用户登录状态无法共享(如 Tomcat 集群) 实现无状态服务,支持水平扩容,登录状态不丢失
限流 / 防刷 接口被恶意高频调用导致的系统崩溃、数据泄露问题 限制接口 QPS,避免恶意请求压垮数据库 / 应用

二、Redis 在若依框架中的具体应用场景(实战落地)

1. 热点数据缓存(最核心场景)

若依框架将高频访问、变更少的数据缓存到 Redis,避免频繁查询数据库,核心应用:

  • 字典数据缓存:系统字典(如性别、状态、权限类型)是全系统高频使用的数据,若依在 DictTypeServiceImpl 中缓存字典: java
    运行
// 若依字典缓存核心代码(com.ruoyi.system.service.impl.DictTypeServiceImpl)
@Override
public List<DictData> selectDictDataByType(String dictType) {
    // 1. 先查Redis缓存
    String key = CacheConstants.SYS_DICT_KEY + dictType;
    List<DictData> dictDataList = redisCache.getCacheObject(key);
    if (CollUtil.isNotEmpty(dictDataList)) {
        return dictDataList;
    }
    // 2. 缓存未命中,查数据库
    dictDataList = dictDataMapper.selectDictDataByType(dictType);
    // 3. 存入Redis,设置过期时间(避免缓存雪崩)
    redisCache.setCacheObject(key, dictDataList, CacheConstants.SYS_DICT_EXPIRE, TimeUnit.MINUTES);
    return dictDataList;
}
  • image.gif
  • 菜单 / 权限缓存:用户登录后,菜单、按钮权限数据缓存到 Redis,避免每次请求都查数据库,核心 key:sys:cache:menu:{userId}
  • 用户信息缓存:登录用户的基本信息(如用户名、角色、权限)缓存到 Redis,核心 key:sys:user:{userId}

2. 分布式会话共享(集群部署必备)

若依框架(尤其是微服务版)通过 Redis 实现用户登录会话共享,核心逻辑:

  • 单体版:默认使用 Tomcat 会话,集群部署时切换为 Redis 会话;
  • 微服务版:强制使用 Redis 存储 Session,实现网关 / 业务模块间登录状态共享;
  • 核心配置(application.yml): yaml
spring:
  session:
    store-type: redis # 会话存储到Redis
    timeout: 1800s # 会话超时时间(30分钟)
  redis:
    host: localhost
    port: 6379
    password: 123456
    database: 0 # 会话数据存0号库
  • image.gif

3. 分布式锁(解决并发问题)

若依框架在核心业务(如定时任务、数据导入导出、订单操作)中使用 Redis 分布式锁,避免并发冲突,核心实现:

java

运行

// 若依分布式锁核心工具类(com.ruoyi.common.core.redis.RedisLockUtil)
public boolean tryLock(String lockKey, long timeout, TimeUnit unit) {
    String uuid = UUID.randomUUID().toString();
    // SET NX EX:不存在则设置,同时设置过期时间(避免死锁)
    Boolean success = redisTemplate.opsForValue().setIfAbsent(lockKey, uuid, timeout, unit);
    return Boolean.TRUE.equals(success);
}
// 业务中使用示例(定时任务防重复执行)
@Override
@Scheduled(cron = "0 0 1 * * ?")
public void syncData() {
    String lockKey = "sys:task:syncData";
    try {
        if (redisLockUtil.tryLock(lockKey, 5, TimeUnit.MINUTES)) {
            // 执行业务逻辑(同步数据)
        }
    } finally {
        // 释放锁
        redisLockUtil.unlock(lockKey);
    }
}

image.gif

4. 接口限流 / 防刷(系统防护)

若依框架通过 Redis 实现接口限流(如登录接口防暴力破解、高频接口防刷),核心实现:

java

运行

// 若依限流注解+Redis实现(com.ruoyi.common.annotation.RateLimiter)
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface RateLimiter {
    int limit() default 10; // 单位时间内最大请求数
    int time() default 60; // 时间窗口(秒)
    String key() default "sys:rateLimit:";
}
// 切面实现限流逻辑
@Around("@annotation(rateLimiter)")
public Object around(ProceedingJoinPoint point, RateLimiter rateLimiter) throws Throwable {
    String key = rateLimiter.key() + getIpAddress();
    // 1. Redis自增计数
    Long count = redisTemplate.opsForValue().increment(key, 1);
    // 2. 首次设置过期时间
    if (count == 1) {
        redisTemplate.expire(key, rateLimiter.time(), TimeUnit.SECONDS);
    }
    // 3. 超过限流阈值,拒绝请求
    if (count > rateLimiter.limit()) {
        throw new ServiceException("请求过于频繁,请稍后再试");
    }
    return point.proceed();
}
// 接口使用示例(登录接口限流)
@PostMapping("/login")
@RateLimiter(limit = 5, time = 60) // 60秒内最多5次登录请求
public AjaxResult login(@RequestBody LoginBody loginBody) {
    // 登录逻辑
}

image.gif

5. 其他辅助场景

  • 延迟队列:处理异步任务(如短信发送、邮件推送),核心 key:sys:delay:queue
  • 缓存预热 / 刷新:系统启动时预热字典、菜单等热点数据到 Redis,定时刷新缓存(避免缓存击穿);
  • 数据临时存储:文件上传 / 下载的临时凭证、导出任务的进度状态等,存入 Redis 避免数据库压力。

三、若依框架 Redis 核心配置(必看)

1. 依赖配置(若依默认集成)

xml

<!-- Redis 核心依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- 连接池(提升性能) -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
</dependency>

image.gif

2. 核心配置(application.yml)

yaml

spring:
  # Redis 基础配置
  redis:
    host: localhost # Redis地址
    port: 6379 # 端口
    password: 123456 # 密码(生产环境必填)
    database: 0 # 数据库编号(建议不同业务用不同库,如0:会话,1:缓存,2:锁)
    timeout: 10000ms # 连接超时时间
    # 连接池配置(性能优化核心)
    lettuce:
      pool:
        max-active: 8 # 最大活跃连接数
        max-idle: 8 # 最大空闲连接数
        min-idle: 0 # 最小空闲连接数
        max-wait: -1ms # 最大等待时间(-1表示无限制)
  # 会话存储到Redis(集群部署必开)
  session:
    store-type: redis
    timeout: 3600s

image.gif

3. 序列化配置(避免乱码 / 性能问题)

若依框架自定义 Redis 序列化器(默认用 FastJSON),核心代码:

java

运行

// com.ruoyi.framework.config.RedisConfig
@Bean
public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {
    RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
    redisTemplate.setConnectionFactory(lettuceConnectionFactory);
    
    // 序列化配置(key:String,value:JSON)
    StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
    FastJsonRedisSerializer<Object> fastJsonRedisSerializer = new FastJsonRedisSerializer<>(Object.class);
    
    // key 序列化
    redisTemplate.setKeySerializer(stringRedisSerializer);
    redisTemplate.setHashKeySerializer(stringRedisSerializer);
    // value 序列化
    redisTemplate.setValueSerializer(fastJsonRedisSerializer);
    redisTemplate.setHashValueSerializer(fastJsonRedisSerializer);
    
    redisTemplate.afterPropertiesSet();
    return redisTemplate;
}

image.gif

四、Redis 使用优化建议(生产环境必看)

  1. 缓存策略优化
  • 缓存击穿:热点数据设置永不过期,或加互斥锁;
  • 缓存雪崩:不同缓存设置不同过期时间(如随机加 1-5 分钟),避免同时失效;
  • 缓存穿透:空值缓存(如查询无结果时,缓存空值并设置短过期时间),或布隆过滤器。
  1. 性能优化
  • 连接池:调整 max-active(建议 10-20)、max-idle,避免频繁创建连接;
  • 序列化:优先使用 FastJSON/Jackson 序列化,避免 JDK 序列化(体积大、性能差);
  • 批量操作:使用 pipeline 批量读写,减少网络 IO。
  1. 安全优化
  • 密码:生产环境必须设置 Redis 密码,禁止空密码;
  • 防火墙:限制 Redis 仅允许应用服务器访问,禁止公网暴露;
  • 数据备份:开启 Redis 持久化(RDB+AOF),定期备份数据。
  1. 监控告警
  • 监控 Redis 内存使用率、命中率、连接数;
  • 内存使用率超过 80% 时告警,避免内存溢出。

总结

Redis 在若依框架中的核心价值可归纳为:

  1. 性能核心:缓存热点数据,将数据库高频查询转为 Redis 内存查询,大幅提升接口响应速度;
  2. 稳定性核心:分布式锁解决并发问题,分布式会话支持集群部署,限流防刷保护系统不被压垮;
  3. 扩展性核心:延迟队列、临时存储等场景,提升系统异步处理能力和扩展性;
  4. 配置关键:合理配置连接池、序列化方式、过期时间,是 Redis 高效稳定运行的基础。
若依最新前后端分离源码下载:

https://gitee.com/ruoyieleadmin/ruoyi-ele-admin

相关文章
|
2月前
|
XML Java 应用服务中间件
一步到位!若依框架升级 Tomcat 最新版完整教程
若依(RuoYi)框架升级 Tomcat 到最新版本的完整流程,我会从升级前提、核心步骤、版本适配、避坑指南四个维度拆解,覆盖单体版(RuoYi-Vue)和微服务版(RuoYi-Cloud),确保升级后系统稳定运行
562 3
|
2月前
|
SQL 监控 druid
若依(RuoYi)框架 Druid 配置详解
核心说明:Druid 是阿里巴巴开源的高性能数据库连接池,兼具连接池管理、SQL监控、防SQL注入、日志记录等核心功能,若依(RuoYi)框架(含RuoYi-Vue、RuoYi-Cloud)已默认集成 Druid,核心配置集中在 application-druid.yml 文件,同时需配合 application.yml 进行环境关联,以下是完整配置解析、实操步骤及常见问题,适配若依框架全版本,兼顾入门使用与进阶优化。
907 4
|
存储 Java 数据库
若依框架----源码分析(@Log)
若依框架----源码分析(@Log)
3594 1
|
2月前
|
存储 关系型数据库 MySQL
吃透 OceanBase:从底层原理到 Java 生产级落地全指南
本文详解OceanBase V4.4.2核心架构与实战:涵盖Shared-Nothing分布式设计、LSM-Tree存储引擎、Multi-Paxos强一致机制;深度对比MySQL兼容性;提供SpringBoot+MyBatis-Plus全栈Java示例,含Docker部署、分表建模、分布式事务及HTAP实战,并总结生产优化与避坑指南。(239字)
575 2
|
2月前
|
安全 Java API
将若依(RuoYi)框架从适配 Spring Boot 2 的版本升级到 Spring Boot 3
将若依(RuoYi)框架从适配 Spring Boot 2 的版本升级到 Spring Boot 3,这是一个涉及依赖、配置、API 兼容等多方面的系统性升级工作。
665 6
|
2月前
|
存储 Java 中间件
Java 虚拟线程:JDK21 轻量级并发革命
JDK21正式引入的虚拟线程是Java并发模型的革命性升级:轻量(百字节/个)、百万级可扩展、JVM自主调度、零OS上下文切换,完美解决传统平台线程内存高、并发低、调优难痛点,尤其适用于IO密集型微服务与网关场景。
403 4
|
缓存 NoSQL Java
Java高并发实战:利用线程池和Redis实现高效数据入库
Java高并发实战:利用线程池和Redis实现高效数据入库
1161 0
|
SQL 前端开发 NoSQL
【若依】前后端分离版快速上手
【若依】前后端分离版快速上手
2160 1
|
监控 NoSQL Java
若依RuoYi项目环境搭建教程(RuoYi-Vue + RuoYi-Vue3版本)
若依(RuoYi)是一款基于Spring Boot和Vue.js的开源Java快速开发脚手架,支持OAuth2、JWT鉴权,集成多种安全框架和持久化框架。它提供了系统管理、监控管理、任务调度、代码生成等常用功能模块,适合中小型公司快速搭建Web应用。本文主要介绍若依框架的特点、版本发展、优缺点及项目部署步骤,帮助开发者快速上手并部署若依项目。
19683 3
若依RuoYi项目环境搭建教程(RuoYi-Vue + RuoYi-Vue3版本)
|
存储 SQL 前端开发
【若依RuoYi-Vue | 项目实战】帝可得后台管理系统(二)
接着上回的【若依RuoYi-Vue | 项目实战】基于若依的帝可得后台管理系统(一),本次我们继续完成人员管理、设备管理、策略管理模块的开发。
2527 6
【若依RuoYi-Vue | 项目实战】帝可得后台管理系统(二)

热门文章

最新文章