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