Java集群实战:单体架构升级到集群架构(四)使用REDIS分布式锁

Java集群实战:单体架构升级到集群架构(一)使用NGINX建立集群

Java集群实战:单体架构升级到集群架构(二)实现session共享

Java集群实战:单体架构升级到集群架构(三)上传文件的共享

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:

扫描二维码关注公众号,回复: 15172595 查看本文章
<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的朋友可以看这篇文章:

最强分布式锁工具:Redisson

网络上介绍redis和redisson的文章太多了,大家可以自己去找一找

猜你喜欢

转载自blog.csdn.net/dengxiaodai/article/details/129707740