分布式锁MLock分布式锁介绍MLockgitee地址分布式锁MLockgithub地址系列文章链接:分布式锁(一)-分布式锁介绍分布式锁(二)-基于Redis的分布式锁的实现(三)-Redisson实现分布式锁(四)-基于Mysql实现分布式锁(五)-MLock的使用介绍(自行实现,基于redis,适用于实际项目)1.基于java+redis实现常用的分布式锁,提供注解和代码,方便简单2.特性支持分布式锁支持分布式校验锁支持分布式幂等支持注解使用和模板使用支持自动续订3.快速上手3.1依赖介绍moonmlock1.0.0-SNAPSHOTmoonmlock1.0.03.2使用分布式锁waitMills(等待锁时间默认为0,即只尝试获取一次锁)注:锁在代码中需要幂等性,分布式幂等锁不需要注解使用@ServicepublicclassTestService{@Lock(domain="lockTest",keys={"#pojo.id"},lockType=LockTypeEnum.LOCK_REDIS,waitTime=60000)publicvoidlockTest(Pojopojo){//todo}}模板使用@ServicepublicclassTestService{publicvoidlockTemplateTest(Pojopojo){LockTemplatelockTemplate=newLockTemplate<>();StringlockKey=String.valueOf(pojo.getId());BooleanlockResult=lockTemplate.execute(LockTypeEnum.LOCK_REDIS,"lockTest",lockKey,60000,TimeUnit.SECONDS,newILockCallback(){@OverridepublicBooleansuccess()throwsLockException{//这里需要添加锁码返回null;}@OverridepublicBooleanfail()throwsLockException{returnnull;}@OverridepublicBooleanex(Exceptione)throwsLockException{返回空值;}});}}分布式检查锁检查锁是否存在,不加锁,如果已经加锁则跳过执行或抛出指定异常@ServicepublicclassTestService{@CheckLock(domain="checkLockTest",keys={"#pojo.id"},lockType=LockTypeEnum.LOCK_REDIS_FORCE)publicvoidcheckLockTest(Pojopojo){//todo}}分布式幂等检查指定key是否被操作过,如果被操作过则跳过执行或者抛出指定异常发生时,默认幂等性默认保留10分钟,适用于避免重复点击、支付、创建、MQ重复消费等@ServicepublicclassTestService{@Idempotent(domain="IdempotentTest",keys={"#token"})publicvoidIdempotentTest(Stringtoken){//todo}}