Skip to content

1. 整体架构设计

该Redis框架采用了分层设计模式,主要包括以下几个层次:

  1. 核心枚举管理层 - [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的命名规范
  2. 接口抽象层 - [RedisCache](file:///D:/Java_projects/damai/damai-redis-tool-framework/damai-redis-framework/src/main/java/com/damai/redis/RedisCache.java#L16-L1302):定义Redis操作的标准接口
  3. 实现层 - [RedisCacheImpl](file:///D:/Java_projects/damai/damai-redis-tool-framework/damai-redis-framework/src/main/java/com/damai/redis/RedisCacheImpl.java#L15-L1287):提供Redis操作的具体实现
  4. 配置层 - [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自动配置类
  5. 工具层 - [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))

java
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))

java
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接口设计遵循以下原则:

  1. 全面覆盖Redis数据类型

    • String类型操作
    • Hash类型操作
    • List类型操作
    • Set类型操作
    • Sorted Set(ZSet)类型操作
  2. 便捷的方法签名

    java
    // 支持自动缓存填充
    <T> T get(RedisKeyBuild redisKeyBuild, Class<T> clazz, Supplier<T> supplier, long ttl, TimeUnit timeUnit);
    
    // 直接支持复杂对象序列化/反序列化
    <T> T get(RedisKeyBuild redisKeyBuild, Class<T> clazz);
  3. 完善的类型转换: 框架内部使用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接口的具体实现,主要特点包括:

  1. 依赖StringRedisTemplate

    java
    private StringRedisTemplate redisTemplate;

    使用StringRedisTemplate而非RedisTemplate,统一处理字符串,简化类型转换。

  2. 自动序列化/反序列化

    java
    String json = object instanceof String ? (String) object : JSON.toJSONString(object);

    自动判断是否需要序列化,对字符串类型直接处理,对对象类型使用JSON序列化。

  3. 完善的空值检查: 使用[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)工具类集中处理参数校验:

java
public static void checkNotBlank(String... key) {
    for (String s : key) {
        if (StringUtil.isEmpty(s)) {
            throw new RuntimeException("请求参数缺失");
        }
    }
}

这种方式避免了在每个方法中重复编写校验代码,提高了代码复用性和一致性。

3.2 支持懒加载和缓存穿透防护

java
<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框架设计体现了良好的软件工程实践:

  1. 关注点分离:各组件职责清晰,易于维护和扩展
  2. 开闭原则:通过接口定义,方便替换底层实现
  3. 易用性:封装复杂性,提供简洁的API
  4. 健壮性:完善的参数校验和异常处理机制
  5. 高性能:支持批量操作,减少网络交互

这套框架使得开发者可以专注于业务逻辑,而无需关心Redis操作的底层细节,大大提高了开发效率和代码质量。