RedissonCommonAutoConfiguration.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表达式的解析。
组件协同工作机制
配置阶段:
- RedissonCommonAutoConfiguration读取RedissonBaseProperties配置
- 创建Redisson客户端并配置线程池
- 注册RedissonDataHandle、LocalLockCache、LockInfoHandleFactory等Bean
运行阶段:
- 当需要分布式锁或防重复执行时,通过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标记位的三层保护机制,确保在高并发场景下的数据一致性和系统稳定性。