正如标题所说,此次更新主要是优化了 Redis 分布锁的灵活性。
@RedisLock(key = "自己定义一个 key", maxWait = 3000,
retry = true, retryRate = 100, timeOut = 1000)
public int insert(){
return 1;
}
这个锁会在事务开启之前获取,在事务提交以后解锁,并且只对 MarsBean 有效,对 API 和 DAO 无效
如果你不需要锁住整个方法,只需要锁一小段代码,那么可以用下面的方式
@MarsBean("testService")
public class TestService {
@MarsWrite("marsRedisLock")
private MarsRedisLock marsRedisLock;
}
LockModel lockModel = new LockModel();
ockModel.setKey("设置一个 key,不同业务之间唯一,保证每次请求都是一样的 key");
ockModel.setValue("设置一个唯一的 value,每次请求都是唯一的");
// 失效时间
ockModel.setTimeOut(10000);
// 重试频率(每隔几毫秒重试一次)
ockModel.setRetryRate(300);
// 没获取到锁,是否重试
lockModel.setRetry(true);
// 最大重试时间(重试多久没成功,就直接放弃)
ockModel.setMaxWait(5000);
Boolean haslock = marsRedisLock.lock(lockModel);
if(haslock){
执行加锁后才能执行的代码
}
marsRedisLock.unlock(lockModel.getKey(), lockModel.getValue());
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.