为什么使用红锁?
依赖红锁解决节点间数据同步不一致的问题。
也可以解决集群中的多个机器获取同一把锁,实现分布式锁的功能。
可以在程序没有执行完成的情况下实现锁的续期,实现看门狗机制。
代码实现案例:
// 红锁@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);}// 红锁
@AutowiredOrderInfoService 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;@Overridepublic 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;}