redis分布式锁

/**
 *   redis分布式锁
 * @author GAOMINGQIAN
 *
 */
@Component
public class RedisLock {
    @Autowired
    private RedisTemplate redisTemlate;
    /**
     *   加锁操作
     * @param key
     * @param value 当前时间+超时时间
     * @return
     */
   public boolean lock(String key,String value){
       if(redisTemlate.opsForValue().setIfAbsent(key, value)){
           return true;
       }
       String currentValue=(String) redisTemlate.opsForValue().get(key);
       //如果锁过期
 if(!StringUtils.isEmpty(currentValue)&&Long.parseLong(currentValue)<System.currentTimeMillis()){
         //获取上一个锁的时间  下面这行代码只有一个线程在执行
           String oldValue=(String) redisTemlate.opsForValue().getAndSet(key, value);
           if(!StringUtils.isEmpty(oldValue)&&oldValue.equals(currentValue)){
               return true;
           }
       }
       return false;
   }
   /**
    *   解锁操作
    * @param key
    * @param value
    */
   public void unlock(String key,String value){
       try{
           String currentValue=(String) redisTemlate.opsForValue().get(key);
           if(!StringUtils.isEmpty(currentValue)&&currentValue.equals(value)){
               redisTemlate.opsForValue().getOperations().delete(key);
           }
       }catch(Exception e){
           Log.error("解锁失败");
       }
     
   }
}

转载于:https://my.oschina.net/gaomq/blog/1788665

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值