Redis(分布式锁)

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