首页 > 数据库 >java Redission 分布式锁的使用

java Redission 分布式锁的使用

时间:2024-07-10 20:30:29浏览次数:17  
标签:RedissonClient java lock redissonClient 获取 Redission public 分布式

在微服务的场景下,一个应用会部署多个实例,在一些业务场景中,需要保证同一时间多个线程只能有一个线程操作资源,分布式锁可以实现这一需求。JAVA 中,Redission 分布式锁是基于Redis实现的分布式锁,使用简单,只需要关注业务场景和使用到的接口即可。

引入依赖

<!-- https://mvnrepository.com/artifact/org.redisson/redisson -->
<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson</artifactId>
    <version>3.14.0</version>
</dependency>

配置类

@Configuration
public class RedisConfig {
    @Bean("redissonClient")
    public RedissonClient redissonClient() {
        Config config = new Config();
        String redisHost = "";
        String password = "";
        Integer port = 6379;
        int dbNo = 0;
        config.useSingleServer()
                .setAddress("redis://" + redisHost + ":" + port)
                .setDatabase(dbNo())
                .setPassword(password());
        // 创建RedissonClient对象
        return Redisson.create(config);
    }
}

获取和释放锁

@Autowired
private RedissonClient redissonClient;


public void redissonLockAndUnlock(){
    // 获取锁,入参指定锁的名称
    RLock lock = redissonClient.getLock("lockName");
    // 尝试获取锁,入参分别为
    // 获取锁时的最大等待时间,该时间内没有获取到锁会自动重试,直到达到最大等待时间还没有获取到锁,返回获取锁失败false
    // 当前锁释放时间
    // 时间单位
    boolean result = lock.tryLock(appParamResource.getCdpCsvHandleLockWaitTime(), appParamResource.getCdpCsvHandleLockLeaseTime(), TimeUnit.SECONDS);
    if (result) {
        log.info("抢锁成功");
        try {
            // do something
        } finally {
            // 业务执行完成后记得及时释放锁
            lock.unlock();
        }
    } else {
        log.error("抢锁失败");
    }
}

标签:RedissonClient,java,lock,redissonClient,获取,Redission,public,分布式
From: https://blog.csdn.net/Zerol_Yan/article/details/140246990

相关文章

  • JavaScript简易ATM机功能
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</title>......
  • java设计模式--创建型模式
    一、设计原则1.1设计模式的目的编写软件过程中,程序员面临着来自耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性等多方面的挑战,设计模式是为了让程序(软件),具有更好的1)代码重用性(即:相同功能的代码,不用多次编写)2)可读性(即:编程规范性,便于其他程序员的阅读和理解)......
  • uniapp-Java使用AES加密解密
    操作前uniapp需要安装  npminstallcrypto-js 在需要使用的界面加入 importCryptoJSfrom'crypto-js' java端<!--springsecurity安全认证--><dependency><groupId>org.springframework.boot</groupId>......
  • Python 爬虫与 Java 爬虫:相似之处、不同之处和选项
    在信息时代,网络上可用的数据量巨大且不断增长。为了从这些数据中提取有用的信息,爬虫已成为一种重要的技术。Python和Java都是流行的编程语言,都具有强大的爬虫功能。本文将深入探讨Python爬虫和Java爬虫之间的差异,以帮助您在选择适合您需求的语言时做出明智的决定。一......
  • Java的IO流
    1.简单介绍2.常用IO流:3.分类接下来所有的内容都是InputStream、OutputStream、Reader、Writer的子类。和File相关的IO流有四个分别是FileInputStream和FileOutputStream,FileReader和FileWriter。其中FileReader和FileWriter为字符IO流。FileInputStream和FileOutp......
  • JAVA高级之线程池
    线程的状态(6种)线程状态具体含义NEW一个尚未启动的线程的状态。也称之为初始状态、开始状态。线程刚被创建,但是并未启动。还没调用start方法。MyThreadt=newMyThread()只有线程象,没有线程特征。RUNNABLE当我们调用线程对象的start方法,那么此时线程对象进入了RUNNABLE状态。......
  • 服务网格新篇章:Eureka与分布式服务网格的协同共舞
    服务网格新篇章:Eureka与分布式服务网格的协同共舞引言在微服务架构的浪潮中,服务网格(ServiceMesh)技术以其微服务间通信的精细化控制而备受瞩目。Eureka作为Netflix开源的服务发现框架,虽然本身不直接提供服务网格功能,但可以与服务网格技术如Istio、Linkerd等无缝集成,实现服......
  • Java中类和对象概述
    目录前言:一.初步了解类和对象1.1什么是面向对象?1.2什么是类和对象?​二.类的定义与使用2.1类的格式与定义2.2对象的创建与使用 三.this关键字的使用3.1this的使用方法3.2this引用的特性 四.类的构造方法 五.静态变量和静态方法前言:小编也是第一次写blog,可能......
  • 每天两道Java面试题(一)
    1、this关键字和super关键字的区别及联系this关键字用在本类中。在类的内部,可以在任何方法中使用this引用当前对象。this关键字是用来解决全局变量和局部变量之间的冲突。this()可以调用同类中重载的构造方法,并且需要放在第一行。super关键字用在子类中。在子类中可以通......
  • 使用Java9 Flow API进行Reactive Programming
    importjava.util.concurrent.Flow;importjava.util.concurrent.Flow.Publisher;importjava.util.concurrent.Flow.Subscriber;publicclassReactiveExample{publicstaticvoidmain(String[]args){//创建一个发布者,发布一系列的数字Publisher......