# distributedLock **Repository Path**: screws/distributedLock ## Basic Information - **Project Name**: distributedLock - **Description**: 分布式锁实现 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 4 - **Created**: 2018-08-01 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # distributedLock #### 项目介绍 分布式锁实现 #### 使用说明 **com.yy.distributed.lock.DistributedLockTemplate** 分布式锁模板接口,该接口提供锁实现 **com.yy.distributed.lock.AbstractDLockFactory** 分布式锁对象工厂类,工厂类用于创建锁操作对象,提供2种锁对象:普通锁对象以及公平锁对象 **com.yy.distributed.lock.DistributedLockCallback** 分布式锁方法的回调,用于成功获取锁的回调方法执行 ##### Jedis实现 **com.yy.distributed.lock.redis.JedisDistributedLockTemplate** 分布式锁模板接口的Jedis实现 **com.yy.distributed.lock.redis.JedisLockFactory** Jedis锁对象工厂类,提供普通锁对象的创建(公平锁TODO),该工厂类依赖JedisPool对象,创建该对象时,必须注入jedisPool对象实例 非Spring环境下使用时,手动创建 DistributedLockTemplate 与 AbstractDLockFactory 的实现类对象, 并将 AbstractDLockFactory 实现类对象注入到 DistributedLockTemplate 的实现类对象中 Spring环境下使用时,可通过bean创建上述2个对象实例,该代码也提供了基于AOP的注解式锁使用 ###### 注解: **com.yy.distributed.spring.annotation.DistributedLock** :方法上注解,Aspect的切点,提供的属性有: lockName:锁名;lockNamePre:锁前缀;lockNamePost:锁后缀;separator:锁名分隔符,默认 “.”;release:是否自动释放,默认true;fairLock:是否使用公平锁,默认false;tryLock:是否使用尝试锁,默认false;waitTime:最长等待时间, 默认5;leaseTime:锁超时时间,超时时间过后锁自动释放,默认30;timeUnit:时间单位,默认秒 **com.yy.distributed.spring.annotation.LockName** :方法参数上注解,提供锁名的获取方式 property:获取参数指定属性的值做为锁名 ###### 切面: **com.yy.distributed.spring.aspect.DistributedLockAspect** :切面实现,使用注解式bean创建, **注意spring的包扫描** 使用 AOP的AROUND增强处理方式, 当未配置锁名时,默认获取锁名为 缩略类名与方法名的拼接,如:c.y.d.s.a.DistributedLockAspect.getLockName