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 @   君莫笑我十年游  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2021-02-22 阶段六模块二 Spring 学习笔记
点击右上角即可分享
微信分享提示