暂时没时间整细节,给个粗略的记录一下 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071package com.util.qunar;import com.service.qunar.FQunarSearchService;import com.service.zl.ValidationCabinAndPrice_QNR;import org.apache.log4j.Logger;import org.redisson.Redisson;import org.redisson.api.RLock;import org.redisson.api.RedissonClient;import org.redisson.config.Config;import org.springframework.beans.factory.InitializingBean;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import java.util.concurrent.TimeUnit;@Servicepublic class RedissonTemplate { private static volatile RedissonClient redissonClient; private static final String LOCK_TITLE = "QNRLock_"; /** * 加锁 * @param lockName * @param waitTime * @param timeOutSecond * @return */ public static boolean acquireSecond(String lockName, Integer waitTime, Integer timeOutSecond){ try { String key = LOCK_TITLE + lockName; RLock mylock = redisLock().getLock(key); //lock提供带timeout参数,timeout结束强制解锁,防止死锁 //先尝试在超时时间内获取锁,如果没有获取到,此时如果等待时间还有剩余进入循环不断取尝试获取锁 直到时间结束退出 循环中是订阅,时间结束取消订阅 return mylock.tryLock(waitTime, timeOutSecond, TimeUnit.SECONDS); } catch (InterruptedException e) { System.out.println(e); } return false; } /** * 连接redis * @return */ private static RedissonClient redisLock(){ if(redissonClient == null){ synchronized (FQunarSearchService.class){ if(redissonClient == null){ Config config = new Config(); config.useSingleServer().setAddress("redis://127.0.0.1:6379") .setPassword("123") .setDatabase(17); redissonClient = Redisson.create(config); } } } return redissonClient; } /** * 解锁 * @param lockName */ public static void release(String lockName){ String key = LOCK_TITLE + lockName; RLock mylock = redissonClient.getLock(key); mylock.unlock(); }}