当前位置: 首页 > news >正文

Redis学习(13)| Redisson 看门狗机制深度解析

文章目录

        • 摘要
        • 1. 引言
        • 2. 看门狗的工作原理
          • 2.1 自动续期
          • 2.2 防止意外释放
          • 2.3 合理配置
        • 3. 应用场景
        • 4. 最佳实践
          • 4.1 设置合理的`lockWatchdogTimeout`
          • 4.2 避免死锁
          • 4.3 监控和日志
        • 5. 实现方式
        • 6. 使用示例
        • 7. 结论

摘要

Redisson 是一个用于 Redis 的 Java 客户端,它提供了丰富的功能来简化分布式应用的开发。其中,看门狗(Watchdog)机制是 Redisson 为了解决分布式锁过期问题而设计的一个重要特性。本文将深入探讨 Redisson 看门狗的工作原理、应用场景以及最佳实践,并提供代码示例帮助读者更好地理解和使用这一特性。

1. 引言

在分布式系统中,多个节点可能需要协调访问共享资源。为了保证数据的一致性和正确性,通常会使用锁机制来确保同一时间只有一个节点能够操作该资源。然而,在高并发和不可预测的网络环境中,锁可能会因为各种原因提前释放,导致其他节点获取到同一个锁,进而破坏数据一致性。为此,Redisson 提供了看门狗机制,以自动续期的方式防止锁的意外释放。

2. 看门狗的工作原理
2.1 自动续期

当客户端成功获取了一个分布式锁后,如果未明确指定锁的leaseTime,Redisson 会启动一个后台线程(即看门狗)定期更新这个锁的过期时间。默认情况下,看门狗会在每三分之一的lockWatchdogTimeout时间检查一次,并尝试延长锁的过期时间至lockWatchdogTimeout。这样可以确保即使业务逻辑执行时间超过了最初设置的超时时间,锁也不会被意外释放。

2.2 防止意外释放

在网络延迟或其他异常情况下,看门狗机制可以有效避免锁的意外释放。例如,如果一个客户端在持有锁期间突然断开连接,但业务逻辑尚未完成,看门狗会继续尝试续期,直到业务逻辑完成或者达到最大持有时间。

2.3 合理配置

lockWatchdogTimeout的默认值为30秒,但这并不是固定的。根据实际应用场景,开发者应该合理调整这个参数,以平衡锁的安全性和性能开销。设定的时间不宜过短,以免因网络波动等原因导致加锁完成后,看门狗在尝试续期时发现锁已经被删除。

3. 应用场景

看门狗机制特别适用于以下几种情况:

  • 长时间持有锁:对于需要长时间持有锁的业务逻辑,如批量处理任务或复杂计算,看门狗可以确保锁不会因为超时而被释放。
  • 执行时间不确定:对于那些执行时间不确定的任务,如等待用户输入或异步调用,看门狗可以提供额外的安全保障,防止锁的意外丢失。
  • 提高系统可靠性:通过减少锁意外释放的风险,看门狗有助于提高系统的可靠性和稳定性,尤其是在高并发环境下。
4. 最佳实践
4.1 设置合理的lockWatchdogTimeout

lockWatchdogTimeout应该足够长,以应对网络延迟和业务逻辑执行时间的不确定性,但也不宜过长,以免影响其他客户端获取锁的机会。建议根据业务逻辑的平均执行时间和网络环境进行调整。

4.2 避免死锁

尽管看门狗机制可以减少锁的意外释放,但在某些情况下,仍可能导致死锁。因此,建议为锁设置一个合理的最大持有时间,并在业务逻辑中实现超时处理机制。

4.3 监控和日志

在生产环境中,监控和日志记录是非常重要的。可以通过监控工具查看锁的获取、释放和续期情况,并设置报警规则,以便及时发现潜在问题。同时,保持详细的日志记录可以帮助调试和分析问题。

5. 实现方式

Redisson 通过内部调度器(scheduler)实现看门狗的功能。每当成功获取一个锁时,就会创建一个定时任务,该任务会在未来的某个时刻(通常是lockWatchdogTimeout的三分之一处)执行,尝试延长锁的过期时间。如果延长成功,则重新安排下一个定时任务;如果失败(例如,锁已被其他客户端释放),则取消后续的续期操作。

6. 使用示例

下面是一个简单的代码示例,展示了如何在 Redisson 中使用看门狗机制:

import org.redisson.Redisson;
import org.redisson.api.RLock;
import org.redisson.config.Config;public class RedissonWatchdogExample {public static void main(String[] args) throws InterruptedException {// 创建 Redisson 实例Config config = new Config();config.useSingleServer().setAddress("redis://localhost:6379");Redisson redisson = Redisson.create(config);// 获取分布式锁RLock lock = redisson.getLock("myLock");try {// 尝试获取锁,等待时间为 30 秒,没有显示指定 leaseTime,因此会启用看门狗机制boolean locked = lock.tryLock(30, TimeUnit.SECONDS);if (locked) {System.out.println("获取锁成功,开始执行业务逻辑...");// 模拟业务逻辑处理时间Thread.sleep(60000); // 60秒}} finally {// 释放锁lock.unlock();// 关闭 Redisson 实例redisson.shutdown();}}
}

在这个例子中,我们尝试获取一个名为myLock的分布式锁,如果没有其他客户端持有该锁,我们将成功获取锁并启动看门狗机制。然后模拟了一个需要60秒才能完成的业务逻辑,在此期间,看门狗会定期更新锁的过期时间,确保锁不会因为超时而被释放。一旦业务逻辑执行完毕,我们就显式地释放锁,并关闭Redisson实例。

7. 结论

Redisson 的看门狗机制为分布式锁的使用提供了强大的支持,有效地解决了锁过期问题,提高了系统的可靠性和稳定性。通过合理的配置和使用,开发者可以在复杂的分布式环境中更加自信地管理共享资源,确保应用程序的高效运行。

相关文章:

Redis学习(13)| Redisson 看门狗机制深度解析

文章目录 摘要1. 引言2. 看门狗的工作原理2.1 自动续期2.2 防止意外释放2.3 合理配置 3. 应用场景4. 最佳实践4.1 设置合理的lockWatchdogTimeout4.2 避免死锁4.3 监控和日志 5. 实现方式6. 使用示例7. 结论 摘要 Redisson 是一个用于 Redis 的 Java 客户端,它提供…...

【开源大屏】玩转开源积木BI,从0到1设计一个大屏

积木 BI 重磅推出免费大屏设计器!功能超强大,操作超流畅,体验超酷炫。快来体验一下吧。 让我们一起来看一下如何从0到1设计一个大屏。 一、积木BI大屏介绍 积木BI可视化数据大屏 是一站式数据可视化展示平台,旨在帮助用户快速通…...

基于PCRLB的CMIMO雷达资源调度方法(MATLAB实现)

集中式多输入多输出CMIMO雷达作为一种新体制雷达,能够实现对多个目标的同时多波束探测,在多目标跟踪领域得到了广泛运用。自从2006年学者Haykin提出认知雷达理论,雷达资源分配问题就成为一个有实际应用价值的热点研究内容。本文基于目标跟踪的…...

PAT--1035 插入与归并

题目描述 根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列。每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置。如此迭代直到全部元素有序。 归并排序进行如…...

Ubuntu20.04.6编译OpenWRT23.05.5错误

在Ubuntu20.04.6编译OpenWRT23.05.5时,会出现如下提示: fatal error: asm/types.h: No such file or directory 如果我们执行如下命令: sudo ln -s /usr/include/asm-generic /usr/include/asm 此时再次编译,会有如下提示&…...

一文说清flink从编码到部署上线

引言:目前flink的文章比较多,但一般都关注某一特定方面,很少有一个文章,从一个简单的例子入手,说清楚从编码、构建、部署全流程是怎么样的。所以编写本文,自己做个记录备查同时跟大家分享一下。本文以简单的mysql cdc为例展开说明。 环境说明:MySQL:5.7;flink:1.14.0…...

【5G】5G Physical Layer物理层(一)

5G多址接入和物理层与长期演进(LTE)存在一些差异。在下行方向,5G与LTE相似,依旧采用正交频分多址(OFDMA)。而在上行方向,5G采用了OFDMA和单载波频分多址(SC-FDMA)&#x…...

GauHuman阅读笔记【3D Human Modelling】

笔记目录 1. 基本信息2. 理解(个人初步理解,随时更改)3. 精读SummaryResearch Objective(s)Background / Problem StatementMethod(s)EvaluationConclusionReferences1. 基本信息 题目:GauHuman: Articulated Gaussian Splatting from Monocular Human Videos时间:2023.12…...

qemu安装arm64架构银河麒麟

qemu虚拟化软件,可以在一个平台上模拟另一个硬件平台,可以支持多种处理器架构。 一、安装 安装教程:https://blog.csdn.net/qq_36035382/article/details/125308044 下载链接:https://qemu.weilnetz.de/w64/2024/ 我下载的是 …...

在Elasticsearch (ES) 中,integer 和 integer_range的区别

在Elasticsearch (ES) 中,integer 和 integer_range 是两种不同的字段类型,它们用于存储和查询不同类型的数据。 Integer: integer 类型是用于存储32位整数值的简单数据类型。这个类型的字段适合用来表示单一的整数数值,例如用户的年龄、商品的数量等。支持标准的数值操作,…...

Playwright中Page类的方法

导航和页面操作 goto(url: str, **kwargs: Any): 导航到一个URL。 reload(**kwargs: Any): 重新加载当前页面。 go_back(**kwargs: Any): 导航到会话历史记录中的前一个页面。 go_forward(**kwargs: Any): 导航到会话历史记录中的下一个页面。 set_default_navigation_tim…...

硬链接方式重建mysql大表

硬链接方式重建mysql大表 操作步骤 选择数据库 select datadir; 进入数据文件目录 cd /data/mysql/mydata/testdb 创建硬连接 ln test_trans_msg_xx.ibd test_service_trans_msg_xx.ibd.bak ll test_trans_msg_xx* 进库删除表 DROP TABLE test_trans_msg_xx; 重建表 CREATE T…...

GPIO在ZYNQ7000中的结构和相关寄存器解析

GPIO MASK DATA LSW和 MASK DATA MSW LSW和MSW分别是LSW (Least Significant Word)和MSW (Most Significant Word)。 因为DATA是u32,所以如果寄存器的基址是XGPIOPS_DATA_LSW_OFFSET,那么32位就能同时让高16位的MASK DATA MSW]31:16和 MASK DATA LSW的bit7同时为…...

Qt Xlsx安装教程

Qt Xlsx安装教程 安装perl 如果没有安装perl,请参考perl Window安装教程 下载QtXlsxWriter源码 下载地址 ming32-make编译32 lib库 C:\Qt\Qt5.12.12\5.12.12\mingw73_32>d: D:\>cd D:\Code\QtXlsxWriter-master\QtXlsxWriter-master D:\Code\QtXlsxWrit…...

Certimate自动化SSL证书部署至IIS服务器

前言:笔者上一篇内容已经部署好了Certimate开源系统,于是开始搭建部署至Linux和Windows服务器,Linux服务器十分的顺利,申请证书-部署证书很快的完成了,但是部署至Windows Server的IIS服务时,遇到一些阻碍&a…...

【中工开发者】鸿蒙商城实战项目(启动页和引导页)

创建一个空项目 先创建一个新的项目选择第一个,然后点击finish 接下来为项目写一个名字,然后点击finish。 把index页面的代码改成下面代码块的代码,就能产生下面的效果 Entry Component struct Index {build() {Column(){Blank()Column(){…...

跟李笑来学美式俚语(Most Common American Idioms): Part 63

Most Common American Idioms: Part 63 前言 本文是学习李笑来的Most Common American Idioms这本书的学习笔记,自用。 Github仓库链接:https://github.com/xiaolai/most-common-american-idioms 使用方法: 直接下载下来(或者clone到本地…...

scala中如何解决乘机排名相关的问题

任务目标: 1.计算每个同学的总分和平均分 2.按总分排名,取前三名 3.按单科排名,取前三名 好的,我们可以用Scala来完成这个任务。下面是一个简单的示例代码,它将演示如何实现这些功能: // 假设我们有一个…...

OpenCV相机标定与3D重建(10)眼标定函数calibrateHandEye()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 计算手眼标定: g T c _{}^{g}\textrm{T}_c g​Tc​ cv::calibrateHandEye 是 OpenCV 中用于手眼标定的函数。该函数通过已知的机器人…...

Hadoop生态圈框架部署(九-2)- Hive HA(高可用)部署

文章目录 前言一、Hive部署(手动部署)下载Hive1. 上传安装包2. 解压Hive安装包2.1 解压2.2 重命名2.3 解决冲突2.3.1 解决guava冲突2.3.2 解决SLF4J冲突 3. 配置Hive3.1 配置Hive环境变量3.2 修改 hive-site.xml 配置文件3.3 配置MySQL驱动包3.3.1 下在M…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...

Vue 模板语句的数据来源

&#x1f9e9; Vue 模板语句的数据来源&#xff1a;全方位解析 Vue 模板&#xff08;<template> 部分&#xff09;中的表达式、指令绑定&#xff08;如 v-bind, v-on&#xff09;和插值&#xff08;{{ }}&#xff09;都在一个特定的作用域内求值。这个作用域由当前 组件…...

华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)

题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...

如何配置一个sql server使得其它用户可以通过excel odbc获取数据

要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据&#xff0c;你需要完成以下配置步骤&#xff1a; ✅ 一、在 SQL Server 端配置&#xff08;服务器设置&#xff09; 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到&#xff1a;SQL Server 网络配…...

JDK 17 序列化是怎么回事

如何序列化&#xff1f;其实很简单&#xff0c;就是根据每个类型&#xff0c;用工厂类调用。逐个完成。 没什么漂亮的代码&#xff0c;只有有效、稳定的代码。 代码中调用toJson toJson 代码 mapper.writeValueAsString ObjectMapper DefaultSerializerProvider 一堆实…...

虚幻基础:角色旋转

能帮到你的话&#xff0c;就给个赞吧 &#x1f618; 文章目录 移动组件使用控制器所需旋转&#xff1a;组件 使用 控制器旋转将旋转朝向运动&#xff1a;组件 使用 移动方向旋转 控制器旋转和移动旋转 缺点移动旋转&#xff1a;必须移动才能旋转&#xff0c;不移动不旋转控制器…...

大模型真的像人一样“思考”和“理解”吗?​

Yann LeCun 新研究的核心探讨&#xff1a;大语言模型&#xff08;LLM&#xff09;的“理解”和“思考”方式与人类认知的根本差异。 核心问题&#xff1a;大模型真的像人一样“思考”和“理解”吗&#xff1f; 人类的思考方式&#xff1a; 你的大脑是个超级整理师。面对海量信…...