分布式锁 MLock 应用介绍
分布式锁 MLock gitee地址
分布式锁 MLock github地址
1.基于
应用java+redis实现了罕用的分布式锁,提供注解、代码两种应用模式,不便简略
2.个性
- 反对分布式锁
- 反对分布式查看锁
- 反对分布式幂等
- 反对注解用法和模板用法
- 反对主动续约
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 应用
- 分布式锁 waitMills(期待锁工夫默认0,即只尝试一次去获取锁) 留神:Lock须要代码外面幂等,分布式幂等锁不须要 注解用法
@Servicepublic class TestService { @Lock(domain = "lockTest", keys = {"#pojo.id"}, lockType = LockTypeEnum.LOCK_REDIS, waitTime = 60000) public void lockTest(Pojo pojo) { // todo }}
- 模板用法
@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; } } ); }}
- 分布式查看锁 查看锁的存在,不加锁,若已加锁,跳过执行或抛出指定异样
@Servicepublic class TestService { @CheckLock(domain = "checkLockTest", keys = {"#pojo.id"}, lockType = LockTypeEnum.LOCK_REDIS_FORCE) public void checkLockTest(Pojo pojo) { // todo }}
- 分布式幂等 查看指定key是否已被操作,若已操作,跳过执行或抛出指定异样,默认幂等默认保留10分钟,实用于防止反复点击、领取、创立、MQ反复生产等
@Servicepublic class TestService { @Idempotent(domain = "IdempotentTest", keys = {"#token"}) public void IdempotentTest(String token) { // todo }}