使用这个分布式锁的前提是,你配置了Redis连接(Redis连接可看《连接Redis》目录)

在要加锁的方法上添加RedisLock注解

  1. @RedisLock(key = "自己定义一个key")
  2. public int insert(){
  3. return 1;
  4. }

这个锁会在事务开启之前获取,在事务提交以后解锁,并且只对MarsBean有效,对API和DAO无效

如果你不需要锁住整个方法,只需要锁一小段代码,那么可以用下面的方式

在MarsBean里面注入MarsRedisLock对象

  1. @MarsBean("testService")
  2. public class TestService {
  3.  
  4. @MarsWrite("marsRedisLock")
  5. private MarsRedisLock marsRedisLock;
  6.  
  7. }

加锁

  1. Boolean haslock = marsRedisLock.lock("自己定义一个key");
  2. if(haslock){
  3. 执行加锁后才能执行的代码
  4. }

解锁

  1. marsRedisLock.unlock("加锁的时候传入的那个key");

详细说明

无论是用注解还是lock方法,如果没有获取到锁,会等待20秒,20秒内如果能获取到锁,则正常往下执行,20秒内没获取到锁,则直接停止本次操作

lock方法 会返回true和false来表示有无获取到锁

锁的有效时间为20秒,20秒以后会自动解锁

单独弄一个redis来做分布式锁

  • lock方法和unlock方法都有两个重载,上面的示例是使用的配置的Redis连接
  • 如果你想单独弄一个redis来做分布式锁,那么可以调用另一个重载方法,将jedis对象传进去即可,使用开发环境的自动补全功能可以看到另一个重载方法的参数列表