Redis缓存架构
引用文件
本文档引用的文件
- YudaoRedisAutoConfiguration.java
- YudaoCacheAutoConfiguration.java
- YudaoCacheProperties.java
- TimeoutRedisCacheManager.java
- RedisDistributionLockUtils.java
- RedisCacheUtils.java
- RedisClient.java
- org.springframework.boot.autoconfigure.AutoConfiguration.imports
- RedisController.java
- RedisMonitorRespVO.java
- RedisConvert.java
目录
简介
本文件系统性梳理 yudao-cloud 中的 Redis 缓存架构,重点覆盖:
- 多层次缓存设计:应用层缓存、分布式锁、缓存管理器
- 自动配置机制:连接池、序列化策略、缓存管理器选择
- 工具类能力:RedisClient 提供的字符串/哈希/集合/有序集合等常用操作
- 分布式锁:RedisDistributionLockUtils 的加锁/解锁机制与死锁避免策略
- 缓存治理:失效策略、穿透防护、雪崩预防
- 性能优化、监控指标与故障处理
项目结构
yudao-cloud 的 Redis 相关能力主要集中在 yudao-spring-boot-starter-redis 模块,配合基础设施模块提供监控能力。
图表来源
- YudaoRedisAutoConfiguration.java
- YudaoCacheAutoConfiguration.java
- YudaoCacheProperties.java
- TimeoutRedisCacheManager.java
- RedisClient.java
- RedisDistributionLockUtils.java
- RedisCacheUtils.java
- RedisController.java
章节来源
核心组件
- 自动配置类
- YudaoRedisAutoConfiguration:负责 RedisTemplate、RedissonClient 的创建与 JSON 序列化配置
- YudaoCacheAutoConfiguration:负责 RedisCacheConfiguration、CacheManager 选择与本地缓存配置
- 缓存管理器扩展
- TimeoutRedisCacheManager:支持在缓存名中通过“#ttl”语法自定义过期时间
- 工具类
- RedisClient:提供丰富的 Redis 操作封装(字符串、哈希、集合、有序集合、管道等)
- RedisDistributionLockUtils:基于 SETNX 的分布式锁工具
- RedisCacheUtils:基于 CacheManager 的缓存清理工具
- 配置项
- YudaoCacheProperties:缓存扫描批次、随机过期时间范围等
章节来源
- YudaoRedisAutoConfiguration.java
- YudaoCacheAutoConfiguration.java
- YudaoCacheProperties.java
- TimeoutRedisCacheManager.java
- RedisClient.java
- RedisDistributionLockUtils.java
- RedisCacheUtils.java
架构总览
yudao-cloud 的 Redis 缓存采用“自动配置 + 多级缓存 + 工具类”的架构模式:
- 自动配置层:统一创建 RedisTemplate、RedissonClient、CacheConfiguration
- 缓存管理层:支持主 CacheManager(Redis)与本地 Caffeine 缓存,以及按缓存名自定义过期时间
- 应用层:通过 RedisClient 提供的丰富 API 实现业务缓存,通过 RedisDistributionLockUtils 实现分布式锁
- 监控层:基础设施模块提供 Redis 监控接口,输出命令统计与数据库大小
图表来源
详细组件分析
自动配置机制(YudaoRedisAutoConfiguration)
- RedisTemplate 配置
- Key 使用 String 序列化
- Value 使用 JSON 序列化(支持 Java 8 时间类型)
- RedissonClient 配置
- 单机模式,支持密码认证
- 使用 JsonJacksonCodec,注册 JavaTimeModule
- 作用
- 为上层 Cache 与工具类提供统一的 Redis 访问入口
图表来源
章节来源
缓存配置与管理(YudaoCacheAutoConfiguration)
- RedisCacheConfiguration
- 自定义 key 前缀规则,兼容单冒号命名
- 使用 JSON 序列化缓存值
- 支持全局 TTL、禁用空值缓存、禁用 key 前缀
- CacheManager 选择
- 未启用多租户时,优先使用 TimeoutRedisCacheManager
- 启用多租户时,由多租户配置覆盖
- 本地缓存(Caffeine)
- 提供独立的本地缓存管理器,可配置过期时间与容量
图表来源
章节来源
自定义过期时间(TimeoutRedisCacheManager)
- 语法:cacheNames =
"{name}#{ttl}{unit}"- 支持单位:d(天)、h(小时)、m(分钟)、s(秒)
- 默认单位为 s
- 实现要点
- 解析“#ttl”后的持续时间字符串
- 动态设置 RedisCacheConfiguration 的 entryTtl
- 忽略“#ttl”部分创建缓存实例
图表来源
章节来源
RedisClient 工具类(常用操作)
- 键值操作
- get/mGet/setEx/incr/incrBy/del/batchGetWithPrefix
- 支持随机过期时间,避免集中过期
- 哈希操作
- hGet/hGetAll/hSet/hMSet/hDel/hExists/hIncr
- 支持随机过期时间
- 列表操作
- lRange/lLen/lIndex/rPush/lSet/lRem/lTrim/lPop
- 集合操作
- sMembers/sIsMember/sAdd/sRem/sPop/sRandMember/sEditLua
- 支持批量 Lua 批处理与随机过期时间
- 有序集合操作
- zAdd/zCount/zIncrBy/zScore/zRank/zRevRangeWithScores/zRem
- 支 持随机过期时间
- 管道与扫描
- pipelineAction 管道封装
- sScan 增量扫描,避免阻塞
图表来源
章节来源
分布式锁(RedisDistributionLockUtils)
- 加锁
- 基于 SET key value NX EX ttl
- 成功返回 true,失败记录调试日志
- 解锁
- 仅当当前值等于持有者值时删除 key
- 获取锁(重试)
- 在等待时间内循环尝试加锁,间隔固定等待
- 死锁避免策略
- 使用带过期时间的加锁,避免异常释放导致的永久占用
- 值中包含唯一标识,确保仅释放自己的锁
图表来源
章节来源
缓存治理策略
- 失效策略
- 全局 TTL:通过 CacheProperties.Redis 配置
- 自定义 TTL:通过 TimeoutRedisCacheManager 的“#ttl”语法
- 随机过期:RedisClient 提供随机过期时间,缓解缓存击穿
- 缓存穿透
- RedisClient.sort 等方法在空结果时写入“占位空值”,防止重复查询数据库
- 缓存雪崩
- 随机过期时间分散过期时间点
- 本地缓存(Caffeine)作为第二层保护
章节来源