redisson分布式锁

2023-10-27

RLock官网解释

        基于Redis的Java分布式可重入锁对象,实现了锁接口。

        如果获得锁的Redisson实例崩溃,那么这种锁可能永远挂起在获得状态。为了避免这种情况,Redisson维护了锁看门狗,它在锁持有者Redisson实例活着的时候延长锁过期时间。默认情况下,看门狗的超时时间为30秒,可以通过配置进行修改。lockWatchdogTimeout设置。

        可以定义锁获取期间的leaseTime参数。在设定的时间间隔后,锁自动释放。

        RLock对象的行为符合Java Lock规范。这意味着只有锁所有者线程可以解锁它,否则将抛出IllegalMonitorStateException。否则考虑使用RSemaphore对象。

总结下来就是

  • 特性:可重入锁
  • 看门狗默认时间:30秒
  • 释放锁时要关注当前线程是否拥有锁
//获取锁对象
RLock lock = redisson.getLock("myLock");

//传统加锁方法
lock.lock();

//或者获得锁并在10秒后自动解锁
lock.lock(10, TimeUnit.SECONDS);

//加锁阻塞等待时间100秒,且获得锁10秒后自动释放锁
boolean res = lock.tryLock(100, 10, TimeUnit.SECONDS);
if (res) {
   try {
     ...
   } finally {
       lock.unlock();
   }
}

自定义的锁方法

/**
     * 获取锁
     * @param lockName
     * @return
     */
    public static RLock getLock(String lockName){
        RLock rLock = redissonClient.getLock(lockName);
        if(rLock.isLocked()){
            return null;
        }
        rLock.lock(default_lease_time, TimeUnit.SECONDS);
        return rLock;
    }


    /**
     * 获取锁
     * @param lockName
     * @param waitTime 阻塞时间(秒)
     * @return
     */
    public static RLock getLock(String lockName, long waitTime){
        RLock rLock = redissonClient.getLock(lockName);
        try {
            boolean resp = rLock.tryLock(waitTime, default_lease_time,TimeUnit.SECONDS);
            if(resp){
                return rLock;
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 释放锁
     * @param lock
     */
    public static void unlock(RLock lock){
        if(ObjectUtils.isEmpty(lock)){
            return;
        }
        if(!lock.isLocked()){
            return;
        }
        lock.unlock();
    }

除此,官网还有其他几个所对想,具体参考redisson

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

redisson分布式锁 的相关文章

  • Java Swing:从 JOptionPane 获取文本值

    我想创建一个用于 POS 系统的新窗口 用户输入的是客户拥有的金额 并且窗口必须显示兑换金额 我是新来的JOptionPane功能 我一直在使用JAVAFX并且它是不同的 这是我的代码 public static void main Str
  • Android:捕获的图像未显示在图库中(媒体扫描仪意图不起作用)

    我遇到以下问题 我正在开发一个应用程序 用户可以在其中拍照 附加到帖子中 并将图片保存到外部存储中 我希望这张照片也显示在图片库中 并且我正在使用媒体扫描仪意图 但它似乎不起作用 我在编写代码时遵循官方的Android开发人员指南 所以我不
  • Spark 1.3.1 上的 Apache Phoenix(4.3.1 和 4.4.0-HBase-0.98)ClassNotFoundException

    我正在尝试通过 Spark 连接到 Phoenix 并且在通过 JDBC 驱动程序打开连接时不断收到以下异常 为简洁起见 下面是完整的堆栈跟踪 Caused by java lang ClassNotFoundException org a
  • Spring Data JPA 应用排序、分页以及 where 子句

    我目前正在使用 Spring JPA 并利用此处所述的排序和分页 如何通过Spring data JPA通过排序和可分页查询数据 https stackoverflow com questions 10527124 how to query
  • 十进制到八进制的转换[重复]

    这个问题在这里已经有答案了 可能的重复 十进制转换错误 https stackoverflow com questions 13142977 decimal conversion error 我正在为一个类编写一个程序 并且在计算如何将八进
  • JRE 系统库 [WebSphere v6.1 JRE](未绑定)

    将项目导入 Eclipse 后 我的构建路径中出现以下错误 JRE System Library WebSphere v6 1 JRE unbound 谁知道怎么修它 右键单击项目 特性 gt Java 构建路径 gt 图书馆 gt JRE
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • getResourceAsStream() 可以找到 jar 文件之外的文件吗?

    我正在开发一个应用程序 该应用程序使用一个加载配置文件的库 InputStream in getClass getResourceAsStream resource 然后我的应用程序打包在一个 jar文件 如果resource是在里面 ja
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • Java Integer CompareTo() - 为什么使用比较与减法?

    我发现java lang Integer实施compareTo方法如下 public int compareTo Integer anotherInteger int thisVal this value int anotherVal an
  • Eclipse Java 远程调试器通过 VPN 速度极慢

    我有时被迫离开办公室工作 这意味着我需要通过 VPN 进入我的实验室 我注意到在这种情况下使用 Eclipse 进行远程调试速度非常慢 速度慢到调试器需要 5 7 分钟才能连接到远程 jvm 连接后 每次单步执行断点 行可能需要 20 30
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • Google App Engine 如何预编译 Java?

    App Engine 对应用程序的 Java 字节码使用 预编译 过程 以增强应用程序在 Java 运行时环境中的性能 预编译代码的功能与原始字节码相同 有没有详细的信息这是做什么的 我在一个中找到了这个谷歌群组消息 http groups
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • 如何在桌面浏览器上使用 webdriver 移动网络

    我正在使用 selenium webdriver 进行 AUT 被测应用程序 的功能测试自动化 AUT 是响应式网络 我几乎完成了桌面浏览器的不同测试用例 现在 相同的测试用例也适用于移动浏览器 因为可以从移动浏览器访问 AUT 由于它是响
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • 使用 JMF 创建 RTP 流时出现问题

    我正处于一个项目的早期阶段 需要使用 RTP 广播DataStream创建自MediaLocation 我正在遵循一些示例代码 该代码目前在rptManager initalize localAddress 出现错误 无法打开本地数据端口
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will
  • Redis如何存储关联数组?设置、散列还是列表?

    我对 Redis 的所有可用存储选项有点困惑 我想做一些简单的事情 并且不想过度设计它 我正在与phpredis and Redis v2 8 6 我有一个需要存储的简单关联数组 我还需要能够通过其键检索项目并循环遍历所有项目 a arra

随机推荐

  • JavaScript实现网页打印,可设置页眉、页脚、页边距

    WebBrowser是IE内置的浏览器控件 无需用户下载 即可实现客户端页面打印 关于这个组件还有其他的用法 列举如下 WebBrowser ExecWB 1 1 打开 Web ExecWB 2 1 关闭现在所有的IE窗口 并打开一个新窗口
  • fit_transform和transform

    1 二者区别 fit 用来求得训练集X的均值 方差 最大值 最小值 这些训练集X固有的属性 transform 在fit的基础上 进行标准化 降维 归一化等操作 fit transform 包含上述两个功能 2 为什么训练集用fit tra
  • 逻辑回归--Octave实现

    The logistic regression cost function is convex so gradient descent will always find the global minimum 问题一 采用逻辑回归 Suppo
  • 新出炉!谷歌AI #DreamFusion 从文本生成3D模型

    文本生成图像已有了大量模型工具 文本生成3D模型的工具到是很少见 我记得有一期推文介绍了文本生成数字人模型吧 现在有能生成通用3D模型的工具了 近期谷歌AI 发布了文本生成3D模型 Dreamfusion 赶紧去体验下有多神奇 DreamF
  • mysql join 一对多_leftjoin陷阱之一对多导致数据量增加

    从上面2张图可以看出 本来我们是想用一些left join来匹配出我们需要的信息 但却因此使得我们的统计数据量增大了 为什么呢 这个就是原因了 我们关联的一张表有1 n的情况 vcD4KCgoKCjxwPs6qwcvR3cq x Wz rr
  • React——函数组件与类组件

    一 函数组件 和 类组件介绍 1 函数组件 函数组件也称无状态组件 顾名思义就是以函数形态存在的 React 组件 在 hooks 出现之前 react 中的函数组件通常只考虑负责UI的渲染 没有自身的状态 没有业务逻辑代码 是一个纯函数
  • 软件开发中项目经理有那些职责

    搜集了一篇软件开发中项目管理的文章 大家看看 当项目繁多的时候 需要规范 并且定义到细节 只有这样 才能支持大规模的开发 PM非常重要 PM的能力将直接导致项目最后的质量 本文是根据公司当前的现状而描述的 并不一定普遍适用 合适的 就是最好
  • linux登录界面配置、\etc\motd有趣的图案

    linux登录显示图案 etc motd介绍 图案 佛祖保佑 佛祖瘫痪 fuck me 神兽羊驼 海贼旗 啪 初音未来 攻城狮 we wang you 自制图案 etc motd介绍 etc motd 这个文件是在你登录之后显示的 不管你是
  • sklearn中的datasets.make_moons函数

    make moons是函数用来生成数据集 from sklearn import datasets x y datasets make moons n samples 800 noise 0 3 shuffle True random st
  • 寻路算法——A*算法

    2 寻路算法 A 算法剖析 2 1 A 算法简介 原文链接 http www gamedev net reference articles article2003 asp 原作者文章链接 http www policyalmanac org
  • gitlab持续集成-部门官网文档

    https gitlab com gitlab org gitlab blob master lib gitlab ci templates Nodejs gitlab ci yml https gitlab com gitlab org
  • 软件测试外包公司怎么样?为什么没人去?看我终极解密外包!

    目录 导读 一 前言 什么是软件测试外包 二 软件测试外包的好处与坏处 三 进软件测试外包公司前的思考 四 软件测试外包流行的原因挖掘 五 总结 一 前言 什么是软件测试外包 随着最近10年创业风气的发起 已经涌起创业项目外包公司的兴起 已
  • 算法笔记5.6--N的阶乘

    题目描述 输入一个正整数N 输出N的阶乘 输入 正整数N 0 lt N lt 1000 输出 输入可能包括多组数据 对于每一组输入数据 输出N的阶乘 样例输入 0 4 7 样例输出 1 24 5040 代码 struct bign int
  • 史上最全的 Spring Boot 学习教程

    本文目录 一 Spring Boot入门 二 Spring Boot配置 三 Spring Boot与日志 四 Spring Boot与Web开发 五 Spring Boot与Docker 六 Spring Boot与数据访问 七 Spri
  • 历时130天784分通过了HCIE笔试

    这是自己送给自己2023年最好的礼物 从学习到备考笔试经历了130天 对我来说每天都是背负着一个沉重的包袱前行 活的很累很累 期间不被人理解 学到崩溃 并且放弃了n次又爬起来 不得不说这些我都熬过来了 其实感觉一张成绩单就能检验一个人的能力
  • kinect fusion+opencv程序

    define CRT SECURE NO WARNINGS include pch h This file is part of OpenCV project It is subject to the license terms in th
  • C++:实现socket通信(TCP/IP)实例

    首先声明 博主之前从来没有写过通信方面的东西 这次之所以写这个是因为项目需要 因此本文主要介绍一个使用C 语言及Socket来实现TCP IP通信的实例 希望可以帮助入门者 本教程 属于基础教程 针对入门者 如需更深入的功能 自行扩展 IP
  • 【数据结构】图的创建与遍历

    图 Graph 是由顶点的有穷非空集合和顶点之间边的集合组成 通常表示为 G V E 其中 G表示一个图 V是图G中顶点的集合 E是图G中边的集合 线性表 线性关系 由直接前驱和直接后继组成 树 层次关系 由父结点和孩子结点组成 每个结点最
  • 访问XP共享出现的问题解决办法

    好多xp系统启用了guest也无法网络访问 故障解决如下 启用了guest为什么仍然不能访问 1 默认情况下 xp 禁用guest帐户 2 默认情况下 xp的本地安全策略禁止guest用户从网络访问 3 默认情况下 xp的本地安全策略 用户
  • redisson分布式锁

    RLock官网解释 基于Redis的Java分布式可重入锁对象 实现了锁接口 如果获得锁的Redisson实例崩溃 那么这种锁可能永远挂起在获得状态 为了避免这种情况 Redisson维护了锁看门狗 它在锁持有者Redisson实例活着的时