Redisson实现分布式锁

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()+"执行释放锁成功.....");
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值