1、引入依赖
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.10.7</version>
</dependency>
2、添加配置
@Configuration
public class RedissonConfig {
private static final int POOL_SIZE = 10;
@Autowired
private RedisProperties redisProperties;
@Bean
RedissonClient redissonSentinel() {
System.out.println("sentinel redisProperties:" + redisProperties.getSentinel());
Config config = new Config();
List<String> nodes = redisProperties.getSentinel().getNodes();
List<String> newNodes = new ArrayList(nodes.size());
nodes.stream().forEach((index) -> newNodes.add(
index.startsWith("redis://") ? index : "redis://" + index));
SentinelServersConfig serverConfig = config.useSentinelServers()
.addSentinelAddress(newNodes.toArray(new String[0]))
.setMasterName(redisProperties.getSentinel().getMaster())
.setReadMode(ReadMode.SLAVE)
.setTimeout(5000)
.setMasterConnectionPoolSize(POOL_SIZE)
.setMasterConnectionMinimumIdleSize(5)
.setSlaveConnectionMinimumIdleSize(5)
.setSlaveConnectionPoolSize(POOL_SIZE);
if (StringUtils.isNotBlank(redisProperties.getPassword())) {
serverConfig.setPassword(redisProperties.getPassword());
}
return Redisson.create(config);
}
}
3、使用
public boolean allowDownLoad(String host) {
boolean rst = false;
RReadWriteLock lock = redissonClient.getReadWriteLock(CONCURRENCY_LOCK + host);
RLock wLock = lock.writeLock();
boolean locked = false;
try {
locked = wLock.tryLock(5, TimeUnit.SECONDS);
if (locked){
}
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
if (wLock != null && locked && wLock.isHeldByCurrentThread()){
wLock.unlock();
}
}
return rst;
}