分布式锁


Redis分布式锁

总体思路:在Redis中添加一个包含过期时间的key,如果key存在则是有锁状态,key不存在则是无所状态

引入redis包

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactid>spring-boot-starter-data-redisartifactId>
dependency>

Redis分布式锁实现

@Compoent
@Slf4j
public class RedisLock{
    @Autowird
    StringRedisTemplate redisTemplate;
    // 加锁
    public Boolean lock(){
        String lockKey = "xxx";   //锁名
        long timeout  = 1000L;   //过期时间
        String unit = TimeUtil.MILLISENCONDS; //时间单位
        bookean succcess = false;
        ValueOperations ops = redisTemplate.opsForValue();
        try{
            success = ops.setIfAbsent(lockKey,"1",timeout,unit).booleanValue();
        }catch(Exception e){
            log.error("RedisLock加锁异常",e);
        }
        return success;
    }

    //释放锁
    public void unLock(){
       Stirng lockKey = "xxx";
        try{
            redisTemplate.delete(lockKey);
        }catch(Exception e){
            log.error("RedisLock释放锁异常",e);
        }
    }
}

Etcd分布式锁