1. 整体架构设计
该Redis框架采用了分层设计模式,主要包括以下几个层次:
- 核心枚举管理层 - [RedisKeyManage](file:///D:/Java_projects/damai/damai-redis-tool-framework/damai-redis-framework/src/main/java/com/damai/core/RedisKeyManage.java#L12-L139):统一管理所有Redis Key的命名规范
- 接口抽象层 - [RedisCache](file:///D:/Java_projects/damai/damai-redis-tool-framework/damai-redis-framework/src/main/java/com/damai/redis/RedisCache.java#L16-L1302):定义Redis操作的标准接口
- 实现层 - [RedisCacheImpl](file:///D:/Java_projects/damai/damai-redis-tool-framework/damai-redis-framework/src/main/java/com/damai/redis/RedisCacheImpl.java#L15-L1287):提供Redis操作的具体实现
- 配置层 - [RedisCacheAutoConfig](file:///D:/Java_projects/damai/damai-redis-tool-framework/damai-redis-framework/src/main/java/com/damai/redis/config/RedisCacheAutoConfig.java#L11-L19):Spring Boot自动配置类
- 工具层 - [CacheUtil](file:///D:/Java_projects/damai/damai-redis-tool-framework/damai-redis-framework/src/main/java/com/damai/redis/CacheUtil.java#L14-L143)和[RedisKeyBuild](file:///D:/Java_projects/damai/damai-redis-tool-framework/damai-redis-framework/src/main/java/com/damai/redis/RedisKeyBuild.java#L11-L54):提供辅助工具类
2. 核心设计理念
2.1 Key管理机制 ([RedisKeyManage](file:///D:/Java_projects/damai/damai-redis-tool-framework/damai-redis-framework/src/main/java/com/damai/core/RedisKeyManage.java#L12-L139))
public enum RedisKeyManage {
Key("key","键值测试","value为TestCacheDto类型","k"),
Key2("key:%s","键值占位测试","value为TestCacheDto类型","k"),
USER_LOGIN("user_login_%s_%s","user_login","value为UserVo类型","k"),
// ... 更多key定义
}这种设计有几个优势:
- 集中化管理所有Redis Key,避免命名冲突和不一致
- 每个Key都有详细的文档说明(用途、value类型等)
- 支持占位符,便于动态构建Key
2.2 Key构建机制 ([RedisKeyBuild](file:///D:/Java_projects/damai/damai-redis-tool-framework/damai-redis-framework/src/main/java/com/damai/redis/RedisKeyBuild.java#L11-L54))
public static RedisKeyBuild createRedisKey(RedisKeyManage redisKeyManage, Object... args){
String redisRelKey = String.format(redisKeyManage.getKey(),args);
return new RedisKeyBuild(SpringUtil.getPrefixDistinctionName() + "-" + redisRelKey);
}Key构建器的主要特点:
- 添加应用前缀,防止不同应用间Key冲突
- 通过工厂方法创建,保证Key的一致性和正确性
- 封装了Key的生成逻辑,对外屏蔽细节
2.3 接口设计 ([RedisCache](file:///D:/Java_projects/damai/damai-redis-tool-framework/damai-redis-framework/src/main/java/com/damai/redis/RedisCache.java#L16-L1302))
RedisCache接口设计遵循以下原则:
全面覆盖Redis数据类型:
- String类型操作
- Hash类型操作
- List类型操作
- Set类型操作
- Sorted Set(ZSet)类型操作
便捷的方法签名:
java// 支持自动缓存填充 <T> T get(RedisKeyBuild redisKeyBuild, Class<T> clazz, Supplier<T> supplier, long ttl, TimeUnit timeUnit); // 直接支持复杂对象序列化/反序列化 <T> T get(RedisKeyBuild redisKeyBuild, Class<T> clazz);完善的类型转换: 框架内部使用FastJSON进行对象序列化和反序列化,自动处理各种数据类型的转换。
2.4 实现细节 ([RedisCacheImpl](file:///D:/Java_projects/damai/damai-redis-tool-framework/damai-redis-framework/src/main/java/com/damai/redis/RedisCacheImpl.java#L15-L1287))
RedisCacheImpl是RedisCache接口的具体实现,主要特点包括:
依赖StringRedisTemplate:
javaprivate StringRedisTemplate redisTemplate;使用StringRedisTemplate而非RedisTemplate,统一处理字符串,简化类型转换。
自动序列化/反序列化:
javaString json = object instanceof String ? (String) object : JSON.toJSONString(object);自动判断是否需要序列化,对字符串类型直接处理,对对象类型使用JSON序列化。
完善的空值检查: 使用[CacheUtil](file:///D:/Java_projects/damai/damai-redis-tool-framework/damai-redis-framework/src/main/java/com/damai/redis/CacheUtil.java#L14-L143)工具类进行各种参数校验,提高系统健壮性。
3. 设计亮点
3.1 统一异常处理和参数校验
框架通过[CacheUtil](file:///D:/Java_projects/damai/damai-redis-tool-framework/damai-redis-framework/src/main/java/com/damai/redis/CacheUtil.java#L14-L143)工具类集中处理参数校验:
public static void checkNotBlank(String... key) {
for (String s : key) {
if (StringUtil.isEmpty(s)) {
throw new RuntimeException("请求参数缺失");
}
}
}这种方式避免了在每个方法中重复编写校验代码,提高了代码复用性和一致性。
3.2 支持懒加载和缓存穿透防护
<T> T get(RedisKeyBuild redisKeyBuild, Class<T> clazz, Supplier<T> supplier, long ttl, TimeUnit timeUnit);该方法提供了缓存自动加载机制,当缓存不存在时执行Supplier获取数据并自动缓存,有效防止缓存穿透问题。
3.3 泛型支持和类型安全
接口大量使用泛型,在编译期就能发现类型错误,减少运行时异常。
3.4 完善的批处理支持
提供了批量操作方法如[multiSet](file:///D:/Java_projects/damai/damai-redis-tool-framework/damai-redis-framework/src/main/java/com/damai/redis/RedisCacheImpl.java#L209-L221)、[getKeys](file:///D:/Java_projects/damai/damai-redis-tool-framework/damai-redis-framework/src/main/java/com/damai/redis/RedisCacheImpl.java#L112-L120)等,提高操作效率。
4. 总结
该Redis框架设计体现了良好的软件工程实践:
- 关注点分离:各组件职责清晰,易于维护和扩展
- 开闭原则:通过接口定义,方便替换底层实现
- 易用性:封装复杂性,提供简洁的API
- 健壮性:完善的参数校验和异常处理机制
- 高性能:支持批量操作,减少网络交互
这套框架使得开发者可以专注于业务逻辑,而无需关心Redis操作的底层细节,大大提高了开发效率和代码质量。