Redis(分布式锁)
基于redis 模型的锁 demo
<dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>2.1.0</version> </dependency>
public class DistributedLock {
//private static LockManager lockManager = new LockManagerRemoteImpl(GlobalConstant.getRemoteLockServer());
private static Logger logger = LoggerFactory.getLogger(DistributedLock.class);
private static Config config = new Config();
private static Redisson redisson = null;
private static void init() {
if(redisson==null){
config.useSingleServer().setAddress(GlobalConstant.getRemoteLockServer());
redisson = Redisson.create(config);
}
}
public static boolean tryLock(String key){
init();
logger.info("try to lock : " + key);
try {
RLock mylock = redisson.getLock(key);
while(mylock.isLocked()){
Thread.sleep(10);
}
mylock.lock(10, TimeUnit.SECONDS);//10s超时
logger.info("try to lock : " + key +" success...");
return true;
} catch (Exception e) {
logger.warn("DistributedLock try lock :" + key +"error:" + e.getMessage());
return false;
}
}
public static boolean tryLock(String key,long timeout){
init();
logger.info("try to lock : " + key);
try {
RLock mylock = redisson.getLock(key);
while(mylock.isLocked()){
Thread.sleep(10);
}
mylock.lock(timeout, TimeUnit.SECONDS);//10s超时
logger.info("try to lock : " + key +" success...");
return true;
} catch (Exception e) {
logger.warn("DistributedLock try lock :" + key +"error:" + e.getMessage());
return false;
}
}
public static void releaseLock(String key){
logger.info("try to release lock : " + key);
RLock mylock = redisson.getLock(key);
mylock.unlock();
}
}
