# distributed-lock **Repository Path**: liubiao11/distributed-lock ## Basic Information - **Project Name**: distributed-lock - **Description**: 1、分布式锁,用于高并发场景。比如防止商品超卖,优惠券超送,意见反馈重复提交等业务场景; 2、因为应用redis比较多,wiki里还有一堆redis相关的问题及应用场景等; - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2021-04-23 - **Last Updated**: 2024-07-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 一、使用说明 ## 1 引入maven依赖 ``` com.i5 distributed-lock-spring-boot-starter 版本号 ``` 版本号: 1.0.0 ## 2 增加配置 如: ``` lock-config: pattern: single #redis模式配置,single:单机模式,cluster:集群模式,replicated:云托管模式,sentinel:哨兵模式,master_slave:主从模式 不同的redis模式对应不同的配置方式,single-server对应的就是单机模式,具体参数意义可参考redisson的配置参数说明 single-server: address: 127.0.0.1 port: 6379 password: 123456 ``` ## 3 增加注解@Lock和@Key, 如: ``` @Lock public void hello(String ces, @Key String orderNo) { System.out.println("hello"); } ``` # 二、注意事项 ## 1 @Lock提供六个参数可以配置 ``` lockType:锁类型 leaseTime:加锁时间 waitTime:最长等待时间 timeUnit:锁时长单位 prefixName:自定义锁前缀 automaticRelease:是否自动释放 ``` ## 2 @Key注解用于标识加锁的参数,红锁和联锁支持使用多个@Key,@Key提供三种注解方式 ### 2.1 方法参数注解:在方法的参数前面使用@Key标识用来作为加锁条件的参数。 如下: ``` @Lock(lockType=LockType.REENTRANT,waitTime=20,leaseTime=10) public void lock(String ces, @Key String orderNo) { System.out.println("hello"); } ``` ### 2.2 方法体注解:在方法体上面使用@Key标识用来作为加锁条件的参数。 如下: ``` @Lock(lockType=LockType.REENTRANT,waitTime=20,leaseTime=10) @Key({"DemoEntity.orderNo"}) public void lock(DemoEntity entity) { System.out.println("hello"); } ``` ### 2.3 参数类属性注解:在方法的参数类属性上面使用@Key标识用来作为加锁条件的参数 如下: ``` @Setter @Getter public class PropertiesLockEntity { @Key private String id; private Integer count; } @Lock(lockType=LockType.REENTRANT,waitTime=20,leaseTime=10) public void lock(PropertiesLockEntity demoEntity) { System.out.println("hello"); } ``` ## 3 如果在方法上使用了@Lock但并未进行指定Key那么会默认锁整个方法 ## 4 @Lock注解一定要写在@Transaction前面,或是设置更高的优先级,不然会导致事务失效。(因为破坏了事务的原子性)