我们还是从这张图开始:

这张图是《Java集群:单体架构升级到集群架构(一)使用NGINX建立集群》里面使用的。如果你的代码中使用了synchronized和lock,它们在单体应用中跑得很好,但是在集群环境中就不好用了,因为它们只能锁住自己的tomcat,锁不了其他tomcat。这时候要把synchronized和lock改成分布式锁。常见的分布式锁有数据库的乐观锁悲观锁,zookeeper分布式锁,etcd分布式锁,redis分布式锁等等。我们前面已经使用redis来保存session了,所以今天我们就再使用redis分布式锁。
GitHub: GitHub - Dengxd/JavaCluster 所有源码都在这里,GitHub经常连不上,要多刷新几次
首先在pom.xml中引入redisson:
org.redisson redisson 3.20.0
然后建立一个bean:
@Configuration
public class Configure {@Beanpublic RedissonClient redissonClient() {Config config = new Config();// use "rediss://" for SSL connectionconfig.useSingleServer().setAddress("redis://127.0.0.1:6379");RedissonClient redisson = Redisson.create(config);return redisson;}
}
这样就可以使用redissonClient进行加锁操作
主要的加锁代码也很简单:
RLock lock = redissonClient.getLock("TicketLock");//建立锁
try {lock.lock();//锁住资源//在这里写您要做的工作} catch (Exception e) {e.printStackTrace();return e.getMessage();
}finally {lock.unlock();//释放锁
}
是不是很简单?
要安装redis,可以参考《Java集群:单体架构升级到集群架构(二)实现session共享》
想了解redisson的朋友可以看这篇文章:
最强分布式锁工具:Redisson
网络上介绍redis和redisson的文章太多了,大家可以自己去找一找