java代码使用红锁实现加锁

为什么使用红锁?

依赖红锁解决节点间数据同步不一致的问题。
也可以解决集群中的多个机器获取同一把锁,实现分布式锁的功能。
可以在程序没有执行完成的情况下实现锁的续期,实现看门狗机制。
 代码实现案例:
    // 红锁
    @Bean("redissonClient1")
    public RedissonClient redissonClient1(){
        Config config = new Config();
        config.useSingleServer().setAddress("redis://127.0.0.1:6379").setDatabase(0);

        return Redisson.create(config);
    }
    @Bean("redissonClient2")
    public RedissonClient redissonClient2(){
        Config config = new Config();
        config.useSingleServer().setAddress("redis://127.0.0.1:6380").setDatabase(0);

        return Redisson.create(config);
    }

    @Bean("redissonClient3")
    public RedissonClient redissonClient3(){
        Config config = new Config();
        config.useSingleServer().setAddress("redis://127.0.0.1:6381").setDatabase(0);

        return Redisson.create(config);
    }

    @Bean("redissonClient4")
    public RedissonClient redissonClient4(){
        Config config = new Config();
        config.useSingleServer().setAddress("redis://127.0.0.1:6382").setDatabase(0);

        return Redisson.create(config);
    }
    @Bean("redissonClient5")
    public RedissonClient redissonClient5(){
        Config config = new Config();
        config.useSingleServer().setAddress("redis://127.0.0.1:6383").setDatabase(0);

        return Redisson.create(config);
    }


    // 红锁
    @Autowired
    OrderInfoService orderInfoService;

    @Autowired
    @Qualifier("redissonClient1")
    RedissonClient redissonClient1;

    @Autowired
    @Qualifier("redissonClient2")
    RedissonClient redissonClient2;

    @Autowired
    @Qualifier("redissonClient3")
    RedissonClient redissonClient3;

    @Autowired
    @Qualifier("redissonClient4")
    RedissonClient redissonClient4;

    @Autowired
    @Qualifier("redissonClient5")
    RedissonClient redissonClient5;

    @Override
    public ResponseResult grab(DriverGrabRequest driverGrabRequest) {

        String orderId = driverGrabRequest.getOrderId()+"";

        String key = orderId;

        // 红锁
        RLock rLock1 = redissonClient1.getLock(key);
        RLock rLock2 = redissonClient2.getLock(key);
        RLock rLock3 = redissonClient3.getLock(key);
        RLock rlock4 = redissonClient4.getLock(key);
        RLock rlock5 = redissonClient5.getLock(key);

        RedissonRedLock lock = new RedissonRedLock(rLock1, rLock2, rLock3, rlock4, rlock5);
        lock.lock();

        System.out.println("开始锁redis redisson cluster yaml");
        try {
            TimeUnit.SECONDS.sleep(40);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        ResponseResult grab = orderInfoService.grab(driverGrabRequest);
        System.out.println("结束锁redis redisson cluster yaml");
        lock.unlock();

        return grab;
    }

 

posted @ 2025-02-22 22:40  君莫笑我十年游  阅读(56)  评论(0)    收藏  举报