分布式锁

原创
2018/02/05 10:43
阅读数 36

public static Boolean lock(String redisKey,int seconds,String value) {
        Jedis jedis = null;
        Boolean falg = false;
        try {
            JedisProxy jedisMaster = SpringHelpUtil.getBean(JedisProxy.class);
            jedis = jedisMaster.getJedis();
            Long number = jedis.setnx(redisKey,value);
            //必要的超时机制:获取锁的客户端一旦崩溃,一定要有过期机制,否则其他客户端都降无法获取锁,造成死锁问题
            if(number == 1) {
                jedis.expire(redisKey, seconds);
                falg = true;
            }
            //P4获得锁,master宕机,salve未及时复制,P5或得锁---此异常忽略
            if(number == 0) {
                //rediskey未设置过期时间,设置过期时间
                if(jedis.ttl(redisKey) == -1) {
                    jedis.expire(redisKey, seconds);
                }
            }
        } catch (Exception e) {
            log.error(e.getMessage(),e);
            throw new WorkAuthException(WorkActivateErrorCode.REDIS_ERROR);
        } finally {
            if (jedis != null)
            {
                jedis.close();
            }
        }
        return falg;
    }

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部