1. 配置RedisCluster参数
#redis cluseter 配置信息
redisCluster:
ipAndPorts: 192.168.8.23:7011,192.168.8.23:7012,192.168.8.24:7013,192.168.8.24:7014,192.168.8.25:7015,192.168.8.25:7016
maxTotal: 10000
timeOut: 100000
maxWait: -1
minIdle: 10
maxIdle: 8
pwd: 123456
2. 创建Redisson配置类
@Configuration
@Slf4j
public class RedissonConfig {
@Value("${redisCluster.ipAndPorts}")
private String ipAndPorts;
@Value("${redisCluster.timeOut}")
private int timeOut;
@Value("${redisCluster.pwd}")
private String pwd;
@Bean
public RedissonClient getClient(){
Config config = new Config();
ClusterServersConfig clusterServersConfig = config.useClusterServers();
String hostArr[] = ipAndPorts.split(",");
clusterServersConfig.addNodeAddress("redis://"+hostArr[0])
.addNodeAddress("redis://"+hostArr[1])
.addNodeAddress("redis://"+hostArr[2])
.addNodeAddress("redis://"+hostArr[3])
.addNodeAddress("redis://"+hostArr[4])
.addNodeAddress("redis://"+hostArr[5]);
clusterServersConfig.setPassword(pwd)
.setConnectTimeout(timeOut);
RedissonClient redisson = Redisson.create(config);
log.info("redisson 初始化成功...");
return redisson;
}
}
3. 服务调用层
@Controller
@Slf4j
public class RedissonController {
@Autowired
RedissonConfig redissonConfig;
@RequestMapping(value = "testRed")
@ResponseBody
public void testRed() {
RedissonClient client = redissonConfig.getClient();
RLock lock = client.getLock("testLock");
try{
log.info(Thread.currentThread().getName()+"线程尝试获取锁....");
lock.lock(); //默认30s超时时间,期间会有watch dog 每隔1/3时间,也就是10s进行一次锁续命,后续详细看一下
//lock.lock(20000, TimeUnit.SECONDS);
log.info(Thread.currentThread().getName()+"获取锁成功,模拟开始执行业务逻辑....");
Thread.sleep(3000);
}catch (Exception e){
e.printStackTrace();
}finally {
log.info(Thread.currentThread().getName()+"业务执行完成,执行释放锁方法.....");
lock.unlock();
log.info(Thread.currentThread().getName()+"执行释放锁成功.....");
}
}
}