Redission 最常用的可重入锁(Reentrant Lock)

Posted lovoo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redission 最常用的可重入锁(Reentrant Lock)相关的知识,希望对你有一定的参考价值。

前言

在分布式项目中,如果采用本地锁synchronized,只能锁住当前服务器的资源,对于其它服务器的资源无效,如果有100万个周时访问同一接口的数据,还是会有相当一部份会去读取数据库,造成数据库的压力,而redission提供了一个相当完美的锁机制,解决了分布式项目的缓存问题。
流程图:
在这里插入图片描述

安装

<dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson-spring-boot-starter</artifactId>
            <version>3.14.1</version>
        </dependency>

配置

@Configuration
public class MyRedissionConfig {

    @Bean(destroyMethod = "shutdown")
    public RedissonClient redisson() throws IOException {
        Config config = new Config();
        //config.useClusterServers().addNodeAddress("127.0.0.1:6379");
        config.useSingleServer().setAddress("redis://192.168.16.149:6379");
        return Redisson.create(config);
    }
}

使用

在分布式项目中,当其中一个服务器接口中途断了,rlock会自动解锁,然后加上锁

@ResponseBody
    @GetMapping("/hello")
    public String hello(){
        //获得锁
        RLock rlock = redissonClient.getLock("rlock");
        //加锁
        rlock.lock();
        try {
            System.out.println("加锁成功了..........................");
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }finally {
            System.out.println("解锁:" + Thread.currentThread().getId());
            //解锁
            rlock.unlock();
        }
        return "hello";
    }

以上是关于Redission 最常用的可重入锁(Reentrant Lock)的主要内容,如果未能解决你的问题,请参考以下文章

两种方式实现自己的可重入锁

扒开Redisson的小棉袄,Debug深入剖析分布式锁之可重入锁No.1

分布式锁06-Zookeeper实现分布式锁:可重入锁源码分析

分布式锁06-Zookeeper实现分布式锁:可重入锁源码分析

什么是可重入锁(ReentrantLock)?

什么是可重入锁(ReentrantLock)?