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; }
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2021-02-22 阶段六模块二 Spring 学习笔记