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;
}