Skip to content

RedissonBaseProperties.java

RedissonCommonAutoConfiguration.java

LockInfoType.java

Constants.java

RedissonDataHandle.java

LockInfoHandle.java

LockInfoHandleFactory.java

ExtParameterNameDiscoverer.java

LocalVariableTableParameterNameDiscoverer.java

我已经为整个Redisson通用框架添加了详细的中文注释,并总结了这些组件是如何协同工作的。

组件功能说明

1. RedissonBaseProperties

Redisson的基础配置属性类,用于配置Redisson的各种线程池参数。

2. RedissonCommonAutoConfiguration

Redisson的自动配置类,负责创建和配置Redisson客户端及相关组件。

3. LockInfoType

定义不同业务场景下的锁信息处理器类型常量。

4. Constants

定义系统中使用的公共常量,如分隔符。

5. RedissonDataHandle

Redisson数据操作的统一入口,封装了常用的Redis操作。

6. LocalLockCache

本地锁缓存管理器,使用Caffeine缓存ReentrantLock对象。

7. LockInfoHandle & LockInfoHandleFactory

锁信息处理接口及工厂类,用于根据不同业务类型获取对应的锁信息处理器。

8. ExtParameterNameDiscoverer & LocalVariableTableParameterNameDiscoverer

参数名称发现器,用于解析方法参数名称,支持SpEL表达式的解析。

组件协同工作机制

  1. 配置阶段

    • RedissonCommonAutoConfiguration读取RedissonBaseProperties配置
    • 创建Redisson客户端并配置线程池
    • 注册RedissonDataHandle、LocalLockCache、LockInfoHandleFactory等Bean
  2. 运行阶段

    • 当需要分布式锁或防重复执行时,通过LockInfoHandleFactory获取对应的锁信息处理器
    • 锁信息处理器使用参数名称发现器解析方法参数,生成唯一的锁名称
    • 通过LocalLockCache获取本地锁防止JVM内并发
    • 通过Redisson客户端获取分布式锁防止多实例并发
    • 通过RedissonDataHandle操作Redis中的标记位

使用示例

java
// 1. 在application.yml中配置Redisson参数
/*
spring:
  redis:
    redisson:
      threads: 16
      nettyThreads: 32
      corePoolSize: 10
      maximumPoolSize: 20
*/

// 2. 在业务方法上使用防重复执行注解
/*
@RepeatExecuteLimit(
    name = "create_order",
    keys = {"#order.userId", "#order.productId"},
    durationTime = 60,
    message = "订单创建中,请勿重复提交"
)
public String createOrder(Order order) {
    // 业务逻辑
}
*/

// 3. 在需要分布式锁的地方使用
/*
@ServiceLock(
    lockType = LockType.Fair,
    name = "update_inventory",
    keys = {"#productId"}
)
public void updateInventory(Long productId, int quantity) {
    // 业务逻辑
}
*/

这些组件共同构成了一个完整的分布式锁和防重复执行解决方案,提供了本地锁+分布式锁+Redis标记位的三层保护机制,确保在高并发场景下的数据一致性和系统稳定性。