Redis_redis分布式锁-SETNX

  因业务需要使用了redis的SETNX来实现分布式锁。

  描述:Redis有一系列的命令,特点是以NX结尾,NX是Not eXists的缩写,如SETNX命令就应该理解为:SET if Not eXists。这系列的命令非常有用,这里讲使用SETNX来实现分布式锁。 

  直接上重点:

  SET NX 命令是快速失败锁,就是当第一次设置key和value时返回1,当第二次设置相同的key时,返回0,此时对原值不做任何更改。

  使用Jedis调用此命令:

  

public static boolean setnxex(String key, Object value) {
        Jedis jedis = pool.getResource();
        byte[] encodeKey = SafeEncoder.encode(key);
        String result = jedis.set(encodeKey,serialize(value),"nx".getBytes(),"ex".getBytes(),EXPIRE_5_MINUTES);
        if("OK".equals(result)){
            pool.returnResourceObject(jedis);
            return true;
        }
        pool.returnResourceObject(jedis);
        return false;
    }

 

且删除锁的操作一定要是持有锁的人删除,这样才不会有问题。

  

posted @ 2016-09-14 14:05  GisClub  阅读(3017)  评论(0编辑  收藏  举报