分布式锁 MLock 应用介绍

分布式锁 MLock gitee地址
分布式锁 MLock github地址

1.基于

应用java+redis实现了罕用的分布式锁,提供注解、代码两种应用模式,不便简略

2.个性

  1. 反对分布式锁
  2. 反对分布式查看锁
  3. 反对分布式幂等
  4. 反对注解用法和模板用法
  5. 反对主动续约

3.疾速开始

3.1依赖引入

<dependencies>    <!-- 开发测试 -->    <dependency>        <groupId>moon</groupId>        <artifactId>mlock</artifactId>        <version>1.0.0-SNAPSHOT</version>    </dependency>    <!-- 正式版本 -->    <dependency>        <groupId>moon</groupId>        <artifactId>mlock</artifactId>        <version>1.0.0</version>    </dependency></dependencies>

3.2 应用

  1. 分布式锁 waitMills(期待锁工夫默认0,即只尝试一次去获取锁) 留神:Lock须要代码外面幂等,分布式幂等锁不须要 注解用法
@Servicepublic class TestService {    @Lock(domain = "lockTest", keys = {"#pojo.id"}, lockType = LockTypeEnum.LOCK_REDIS, waitTime = 60000)    public void lockTest(Pojo pojo) {        // todo     }}
  1. 模板用法
@Servicepublic class TestService {    public void lockTemplateTest(Pojo pojo) {        LockTemplate<Boolean> lockTemplate = new LockTemplate<>();        String lockKey = String.valueOf(pojo.getId());        Boolean lockResult = lockTemplate.execute(                LockTypeEnum.LOCK_REDIS,                "lockTest",                lockKey,                60000,                TimeUnit.SECONDS,                new ILockCallback<Boolean>() {                    @Override                    public Boolean success() throws LockException {                        // 这里放须要被加锁的代码                        return null;                    }                    @Override                    public Boolean fail() throws LockException {                        return null;                    }                    @Override                    public Boolean ex(Exception e) throws LockException {                        return null;                    }                }        );    }}
  1. 分布式查看锁 查看锁的存在,不加锁,若已加锁,跳过执行或抛出指定异样
@Servicepublic class TestService {    @CheckLock(domain = "checkLockTest", keys = {"#pojo.id"}, lockType = LockTypeEnum.LOCK_REDIS_FORCE)    public void checkLockTest(Pojo pojo) {        // todo     }}
  1. 分布式幂等 查看指定key是否已被操作,若已操作,跳过执行或抛出指定异样,默认幂等默认保留10分钟,实用于防止反复点击、领取、创立、MQ反复生产等
@Servicepublic class TestService {    @Idempotent(domain = "IdempotentTest", keys = {"#token"})    public void IdempotentTest(String token) {        // todo    }}