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; }

浙公网安备 33010602011771号