jar
redisson-all-3.10.5.jar
RedissonConfig
package com.app.util.redisson; import org.redisson.Redisson; import org.redisson.api.RedissonClient; import org.redisson.config.Config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.app.common.utils.PropertiesUtil; import com.app.solr.util.SolrSingleFactory; /** * @ClassName: RedissonConfig * @Description:TODO(双端检索单例工厂模式--》创建 redissonClient 交由 spring IOC管理) * @author: wd * @date: 2020年11月2日 下午5:52:27 */ @Configuration public class RedissonConfig { private static RedissonClient redissonClient; private static final String host=PropertiesUtil.getPropertiesVal("/redis.properties", "redis.host"); private static final String port=PropertiesUtil.getPropertiesVal("/redis.properties", "redis.port"); private static final String password=PropertiesUtil.getPropertiesVal("/redis.properties", "redis.pass"); private static final String database=PropertiesUtil.getPropertiesVal("/redis.properties", "redis.database"); private static final String timeout=PropertiesUtil.getPropertiesVal("/redis.properties", "cachePool.timeout"); @Bean public static RedissonClient getRedisson() { if (redissonClient == null) { synchronized (RedissonConfig.class) { if (redissonClient == null) { redissonClient=getAndSetRedisson(); } } } return redissonClient; } public static RedissonClient getAndSetRedisson() { try { System.out.println("获取redissonClient......"); if (redissonClient == null) { System.out.println("redissonClient为空,创建中......"); synchronized (SolrSingleFactory.class) { if (redissonClient == null) { Config config = new Config(); config.useSingleServer().setAddress("redis://"+host+":"+port) .setPassword(password) // .setConnectionPoolSize(64)//连接池最大连接数,默认 64 // .setConnectionMinimumIdleSize(10)//最小空闲连接数,默认10 .setConnectTimeout(5000) //默认值:10000 同节点建立连接时的等待超时。时间单位是毫秒 .setTimeout(3000) //默认值:3000 等待节点回复命令的时间。该时间从命令发送成功时开始计时 .setDatabase(Integer.valueOf(database)); redissonClient = Redisson.create(config); System.out.println("redissonClient,创建成功......"); } } } } catch (Exception e) { System.out.println("redissonClient,创建异常......"); e.printStackTrace(); } return redissonClient; } }
RedissonUtils.java
package com.app.util.redisson; import java.util.concurrent.TimeUnit; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; /** * @ClassName: RedissonUtils * @Description:TODO(redisson工具类) * @author: wd * @date: 2020年11月3日 上午11:22:33 */ @Component public class RedissonUtils { @Autowired private RedissonClient redissonClient; /** * @Title: getLock * @Description: TODO(获取分布式锁) * @param key * @return RLock * @date 2020年11月3日 上午11:06:59 */ public RLock getLock(String key) { RLock fairLock=null; try { fairLock = redissonClient.getLock(key); //等待60秒,获取锁后会在10后释放锁 fairLock.tryLock(60,10,TimeUnit.SECONDS); } catch (Exception e) { System.out.println("distribute lock key: " +key +" ,获取锁异常"); e.printStackTrace(); }finally { return fairLock; } } /** * @Title: unLock * @Description: TODO(释放锁) * @param rLock * @return void * @date 2020年11月3日 上午11:07:23 */ public void unLock(RLock rLock) { try { if (rLock != null) { rLock.unlock(); } else { System.out.println("distribute lock 不存在"); } } catch (Exception e) { System.out.println("distribute lock key: " + rLock.getName() + " ,释放锁异常"); e.printStackTrace(); } } }
使用
@Autowired private RedissonUtils redissonUtils; RLock fairLock = null; try { fairLock=redissonUtils.getLock(teacherListQueueLock_AFP); 业务逻辑 } catch (Exception e) { e.printStackTrace(); } finally { fairLock.unlock(); }
connection参数说明:https://blog.youkuaiyun.com/qq_25582465/article/details/109311054