redis分布式锁实现

Posted 旺仔哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis分布式锁实现相关的知识,希望对你有一定的参考价值。

 /**
     * 加锁
     */
    public boolean lock(String key, String value)
        //setIfAbsent相当于jedis中的setnx,如果能赋值就返回true,如果已经有值了,就返回false
        //即:在判断这个key是不是第一次进入这个方法
        if (redisTemplate.opsForValue().setIfAbsent(key, value))
            //第一次,即:这个key还没有被赋值的时候
            return true;
       
        String current_value = redisTemplate.opsForValue().get(key);
        if (!MyStringUtils.Object2String(current_value).equals("")
                //超时了
                && Long.parseLong(current_value) < System.currentTimeMillis()) //①
            String old_value = redisTemplate.opsForValue().getAndSet(key, value);//②
            if (!MyStringUtils.Object2String(old_value).equals("")
                    && old_value.equals(current_value))
                return true;
           
       
        return false;
   

    //解锁
    public void unlock(String key, String value)
        try
            if (MyStringUtils.Object2String(redisTemplate.opsForValue().get(key)).equals(value))
                redisTemplate.opsForValue().getOperations().delete(key);
           
        catch (Exception e)
            e.printStackTrace();
       
   

 

以上是关于redis分布式锁实现的主要内容,如果未能解决你的问题,请参考以下文章

如何使用redis实现分布式锁功能?

Redis(十三):Redis分布式锁的正确实现方式

关于redis实现分布式锁

Redis实现分布式锁与Zookeeper实现分布式锁区别

redis 分布式锁

redis分布式锁的正确实现