Redis缓存设计
引用文件
本文引用的文件
- LocalCacheConstants.java
- AppBlacklistedRedisDAO.java
- AppBlacklistedRedisDO.java
- TimeoutRedisCacheManager.java
- YudaoCacheAutoConfiguration.java
- YudaoCacheProperties.java
- RedisUtils.java
- RedisClient.java
- RedisController.java
- RedisMonitorRespVO.java
- RedisConvert.java
- 03-缓存架构.md
- deploy.JenkinsfileV2.sh
- deploy.Jenkinsfile.sh
目录
简介
本文件围绕黑名单系统的Redis缓存设计,系统性阐述缓存键设计、数据结构选择、过期策略配置、分层策略(热/冷)、更新机制(写后读一致性、失效策略、批量更新优化)、监控指标与高可用部署方案。目标是帮助读者快速理解并落地高性能、可维护的Redis缓存体系。
项目结构
黑名单模块的Redis缓存实现主要集中在以下位置:
- 黑名单常量与DAO:负责缓存键命名、Set结构的增删改、随机过期、延迟双删等
- Redis工具与客户端:封装Redisson/RedisTemplate能力,提供Lua批处理、批量删除、Set原子编辑等
- 缓存配置与管理:自定义CacheManager支持“cacheName#ttl”动态过期,本地Caffeine缓存
- 监控与运维:Redis监控接口,采集info/dbSize/commandstats,便于性能分析
图表来源
- AppBlacklistedRedisDAO.java
- RedisClient.java
- RedisUtils.java
- TimeoutRedisCacheManager.java
- YudaoCacheAutoConfiguration.java
- YudaoCacheProperties.java
- RedisController.java
- RedisMonitorRespVO.java
- RedisConvert.java
章节来源
核心组件
- 缓存键设计与命名规范
- 黑名单主键:id:app:blacklisted:
{id} - 按MAC/渠道/区域维度:blacklisted:mac:
{mac}、blacklisted:channel:{channelId}、blacklisted:region:{regionId} - 本地缓存键前缀:blacklist:ids:region、blacklist:ids:channel、blacklist:ids:mac、blacklist:info
- 黑名单主键:id:app:blacklisted:
- 数据结构选择
- Set:按MAC/渠道/区域维度存储“应用黑名单ID集合”,支持O(1)成员添加/删除
- String:主键缓存“黑名单详情对象”,配合随机过期
- Hash:规则引擎场景用于“规则ID->业务ID集合”等KV映射
- 过期策略
- 主键随机过期:由配置属性控制随机范围,降低缓存雪崩风险
- 动态过期:CacheManager支持“cacheName#ttl”,按缓存粒度灵活设置
- 更新机制
- 延迟双删:写后短暂休眠再删除,缓解“脏读”
- Lua原子编辑:批量对多个Set进行add/remove,保证一致性
- 批量删除:Redisson Lua脚本批量删除Hash子键,降低网络往返
- 监控与运维
- 提供Redis监控接口,采集info、dbSize、commandstats,输出命令统计与CPU消耗
章节来源
- LocalCacheConstants.java
- AppBlacklistedRedisDAO.java
- YudaoCacheProperties.java
- TimeoutRedisCacheManager.java
- RedisUtils.java
- RedisController.java
架构总览
黑名单系统的Redis缓存采用“多级缓存 + 原子化更新”的设计:
- 应用层通过DAO统一操作缓存键,按MAC/渠道/区域维度维护Set集合
- 使用Redisson/Lua实现原子编辑,避免分布式锁开销
- 通过随机过期与动态过期结合,平衡命中率与一致性
- 监控接口提供实时洞察,辅助容量规划与性能优化
图表来源