当前位置: 首页 > 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…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

海云安高敏捷信创白盒SCAP入选《中国网络安全细分领域产品名录》

近日&#xff0c;嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》&#xff0c;海云安高敏捷信创白盒&#xff08;SCAP&#xff09;成功入选软件供应链安全领域产品名录。 在数字化转型加速的今天&#xff0c;网络安全已成为企业生存与发展的核心基石&#xff0c;为了解…...

Java后端检查空条件查询

通过抛出运行异常&#xff1a;throw new RuntimeException("请输入查询条件&#xff01;");BranchWarehouseServiceImpl.java // 查询试剂交易&#xff08;入库/出库&#xff09;记录Overridepublic List<BranchWarehouseTransactions> queryForReagent(Branch…...

职坐标物联网全栈开发全流程解析

物联网全栈开发涵盖从物理设备到上层应用的完整技术链路&#xff0c;其核心流程可归纳为四大模块&#xff1a;感知层数据采集、网络层协议交互、平台层资源管理及应用层功能实现。每个模块的技术选型与实现方式直接影响系统性能与扩展性&#xff0c;例如传感器选型需平衡精度与…...