RuoYi-Vue-Plus配置查询:缓存管理
概述
RuoYi-Vue-Plus作为一款强大的多租户后台管理系统,在缓存管理方面提供了完善的解决方案。系统采用多级缓存架构,整合了Redis分布式缓存和Caffeine本地缓存,通过Spring Cache抽象层提供统一的缓存操作接口。本文将深入解析系统的缓存配置、使用方式和最佳实践。
缓存架构设计
多级缓存架构
核心组件说明
| 组件 | 类型 | 作用 | 配置位置 |
|---|---|---|---|
| PlusSpringCacheManager | 缓存管理器 | 统一管理多级缓存 | ruoyi-common-redis |
| RedisUtils | 工具类 | Redis操作工具 | ruoyi-common-redis |
| CacheUtils | 工具类 | Spring Cache操作工具 | ruoyi-common-redis |
| CacheConfig | 配置类 | 缓存全局配置 | ruoyi-common-redis |
核心配置详解
1. 缓存配置类
@AutoConfiguration
@EnableCaching
public class CacheConfig {
@Bean
public Cache<Object, Object> caffeine() {
return Caffeine.newBuilder()
.expireAfterWrite(30, TimeUnit.SECONDS) // 写入后30秒过期
.initialCapacity(100) // 初始容量100
.maximumSize(1000) // 最大容量1000
.build();
}
@Bean
public CacheManager cacheManager() {
return new PlusSpringCacheManager(); // 自定义缓存管理器
}
}
2. Redis工具类核心方法
RedisUtils提供了丰富的Redis操作方法:
// 基本对象缓存
RedisUtils.setCacheObject("user:1", user); // 设置缓存
User user = RedisUtils.getCacheObject("user:1"); // 获取缓存
RedisUtils.deleteObject("user:1"); // 删除缓存
// 列表操作
RedisUtils.setCacheList("user:list", userList);
List<User> users = RedisUtils.getCacheList("user:list");
// 哈希操作
RedisUtils.setCacheMapValue("user:map", "key1", value);
Object value = RedisUtils.getCacheMapValue("user:map", "key1");
// 原子操作
RedisUtils.incrAtomicValue("counter"); // 原子递增
3. Spring Cache工具类
// 使用Spring Cache抽象
CacheUtils.put("userCache", "user:1", user); // 保存缓存
User user = CacheUtils.get("userCache", "user:1"); // 获取缓存
CacheUtils.evict("userCache", "user:1"); // 删除单个缓存
CacheUtils.clear("userCache"); // 清空缓存组
缓存注解使用
1. @Cacheable - 缓存查询
@Cacheable(cacheNames = "sys:user", key = "#userId")
public SysUser getUserById(Long userId) {
return userMapper.selectById(userId);
}
2. @CachePut - 缓存更新
@CachePut(cacheNames = "sys:user", key = "#user.userId")
public SysUser updateUser(SysUser user) {
userMapper.updateById(user);
return user;
}
3. @CacheEvict - 缓存清除
@CacheEvict(cacheNames = "sys:user", key = "#userId")
public void deleteUser(Long userId) {
userMapper.deleteById(userId);
}
4. 缓存命名规则
系统支持灵活的缓存命名规则:
// 格式: cacheName#过期时间#最大空闲时间#最大数量#是否缓存空值
@Cacheable(cacheNames = "demo:cache#60s#10m#20#1", key = "#key")
缓存监控管理
缓存监控接口
系统提供了缓存监控功能,可通过以下接口获取缓存状态:
@RestController
@RequestMapping("/monitor/cache")
public class CacheController {
@GetMapping()
public R<CacheListInfoVo> getInfo() {
// 获取Redis连接信息、数据库大小、命令统计等
}
}
监控指标说明
| 指标 | 说明 | 获取方式 |
|---|---|---|
| 数据库大小 | Redis中key的数量 | connection.dbSize() |
| 内存使用 | Redis内存使用情况 | connection.info() |
| 命令统计 | 各命令调用次数 | connection.info("commandstats") |
最佳实践指南
1. 缓存键设计规范
// 良好的缓存键设计
String cacheKey = "module:entityType:tenantId:entityId";
// 示例: user:sys:1:1001 表示租户1的用户1001
2. 缓存失效策略
// 组合使用多种失效策略
@Caching(
evict = {
@CacheEvict(cacheNames = "user:detail", key = "#userId"),
@CacheEvict(cacheNames = "user:list", allEntries = true)
}
)
3. 缓存穿透防护
// 使用空值缓存防止缓存穿透
@Cacheable(cacheNames = "user#60s#1", key = "#userId",
condition = "#result != null", unless = "#result == null")
4. 多租户缓存隔离
// 自动添加租户前缀
String tenantKey = TenantContext.getTenantId() + ":" + key;
RedisUtils.setCacheObject(tenantKey, value);
常见问题排查
1. 缓存不生效检查清单
2. 性能优化建议
- 本地缓存:高频读取数据使用Caffeine本地缓存
- 批量操作:使用RBatch进行批量Redis操作
- 连接池:合理配置Redisson连接池参数
- 序列化:选择高效的序列化方式(推荐Jackson)
配置参数参考
Redis连接配置
spring:
redis:
redisson:
config: |
singleServerConfig:
address: "redis://127.0.0.1:6379"
connectionPoolSize: 64
connectionMinimumIdleSize: 24
idleConnectionTimeout: 10000
connectTimeout: 10000
timeout: 3000
retryAttempts: 3
retryInterval: 1500
缓存策略配置
# 本地缓存配置(通过代码配置)
caffeine:
expire-after-write: 30s
initial-capacity: 100
maximum-size: 1000
总结
RuoYi-Vue-Plus的缓存管理系统提供了完整的企业级缓存解决方案,通过多级缓存架构、灵活的注解支持和完善的监控功能,能够有效提升系统性能。开发者可以根据业务需求选择合适的缓存策略,结合最佳实践指南进行配置和优化。
关键要点:
- 采用Redis + Caffeine多级缓存架构
- 提供统一的缓存操作工具类
- 支持灵活的缓存注解配置
- 内置缓存监控和管理功能
- 提供多租户缓存隔离支持
通过合理配置和使用缓存,可以显著提升系统响应速度和并发处理能力,为大型企业应用提供稳定的性能保障。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



