Java集群实战:单体架构升级到集群架构(四)使用REDIS分布式锁
Java集群实战:单体架构升级到集群架构(一)使用NGINX建立集群
Java集群实战:单体架构升级到集群架构(二)实现session共享
Java集群实战:单体架构升级到集群架构(三)上传文件的共享
Java集群实战:单体架构升级到集群架构(六)分布式缓存REDIS
我们还是从这张图开始:
这张图是《Java集群实战:单体架构升级到集群架构(一)使用NGINX建立集群》里面使用的。如果你的代码中使用了synchronized和lock,它们在单体应用中跑得很好,但是在集群环境中就不好用了,因为它们只能锁住自己的tomcat,锁不了其他tomcat。这时候要把synchronized和lock改成分布式锁。常见的分布式锁有数据库的乐观锁悲观锁,zookeeper分布式锁,etcd分布式锁,redis分布式锁等等。我们前面已经使用redis来保存session了,所以今天我们就再使用redis分布式锁。
GitHub: GitHub - Dengxd/JavaCluster 所有源码都在这里,GitHub经常连不上,要多刷新几次
首先在pom.xml中引入redisson:
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.20.0</version>
</dependency>
然后建立一个bean:
@Configuration
public class Configure {
@Bean
public RedissonClient redissonClient() {
Config config = new Config();
// use "rediss://" for SSL connection
config.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的朋友可以看这篇文章:
网络上介绍redis和redisson的文章太多了,大家可以自己去找一找