【简说八股】Redisson的守护线程是怎么实现的

Redisson

Redisson 是一个 Java 语言实现的 Redis SDK 客户端,在使用分布式锁时,它就采用了「自动续期」的方案来避免锁过期,这个守护线程我们一般也把它叫做「看门狗」线程。

Redission是一个在Java环境中使用的开源的分布式缓存和分布式锁实现,基于Redis数据库。在Redission中,守护线程并不是一个特定的概念,但是它提供了一些功能,可以通过后台线程来实现类似于守护线程的行为。

  1. 后台任务:Redission使用了一些后台任务来维护锁的状态或者其他缓存数据的一致性。例如,Redission会定时检查和更新锁的信息,确保锁在持有者释放后能被正确清理。

  2. 锁自动延期:当使用Redission的锁时,可以设置一个看门狗(watchdog)机制,这是一个后台线程,它会定期检查并延长锁的持有时间。如果在锁自动释放前,业务线程还在执行,看门狗会自动续期锁,防止锁因为业务执行时间过长而被意外释放。

	// 获取锁对象
RLock lock = redisson.getLock("anyLock");
// 尝试获取锁,并设置锁的过期时间,同时开启看门狗进行自动续期
lock.lock(10, TimeUnit.SECONDS);
  1. 事件监听和清理:Redisson 允许设置事件监听器,如锁释放事件。后台线程监听这些事件并进行相关清理工作,确保系统资源有效回收。

以下是实现守护线程行为的几个关键点:

  • setDaemon方法
    Redisson 中没有直接创建 Java 守护线程,但后台任务类似守护线程,会在主线程结束后退出。
  • 资源清理
    当 JVM 关闭或最后一个非守护线程结束时,守护线程负责清理资源,如释放所有锁。
  • 异常处理
    异常"attempt to unlock lock, not locked by current thread by node id"通常表示尝试释放未被当前线程持有的锁,需要在释放锁前检查持有情况。

总结来说,Redission并没有明确地创建Java守护线程,但是它通过后台任务和看门狗机制,实现了守护线程类似的功能,来维护分布式锁和缓存的一致性和可靠性。这些机制保证了即使在高并发和分布式环境下,资源也能被正确管理和清理。

看门狗线程

Redisson 在处理分布式锁时采用了自动续期的机制,通常称为「看门狗」线程。这个看门狗线程负责定期检查并延长锁的持有时间,以避免锁在业务执行过程中过期而被释放。通过看门狗线程的自动续期功能,Redisson 确保了分布式锁在需要时能够持续有效地保持锁定状态。

看门狗机制通常用于分布式系统中的锁管理,特别是在使用分布式锁时非常有用。它的主要作用是定期检查并续期锁的有效时间,以确保在业务处理时间较长或发生异常情况时,锁能够持续有效。

在分布式系统中,由于网络延迟、节点故障等原因,锁的持有时间可能会超出预期,为了避免因此导致锁被意外释放,就需要引入看门狗机制来对锁进行定时续期。具体来说,看门狗机制的工作流程一般包括以下几个步骤:

  1. 锁持有者获取锁后,设置一个自动过期时间(TTL)。
  2. 看门狗定期检查锁的状态,并在接近过期时自动续期锁的持有时间。
  3. 如果锁的持有者因为某种原因无法正常续期锁,看门狗也会负责清理过期的锁,以避免资源泄露。

在 Redisson 中,就采用了看门狗机制来实现分布式锁的自动续期功能。这样一来,在使用分布式锁时,即使业务处理时间较长或发生异常情况,也能够通过看门狗机制确保锁的持续有效,从而提高系统的稳定性和可靠性。

在这里插入图片描述

如想更加深入理解Redis分布式锁,可以仔细看看这篇文章:一文讲透 Redis 分布式锁安全问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/509195.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mac报错:zsh:command not found: brew

1、基本概述? 在使用brew安装程序的时候MAC提示: zsh:command not found: brew 本质就是brew没有安装,这个命令与linux系统中的yum命令类似。 使用的环境说明: 虚拟机版本:VMware Workstation 17 Pro mac os Ventu…

基于springboot实现粮食仓库管理系统项目【项目源码+论文说明】

基于springboot实现粮食仓库管理系统演示 摘要 粮食作为人类生活的重要物质来源,在粮食流通过程中对于粮食仓库的管理不容忽视,随着我国粮食生产能力的提升以粮食存储管理的不断革新,粮食产量的增加为粮食仓储管理带来了挑战也带来了机遇&am…

二叉树的深度,求第k层的节点个数,二叉树的销毁,二叉树寻找值为x的节点

文章目录 一、二叉树的深度二、二叉树的k层节点个数三、二叉树的销毁四、二叉树查找值为x的节点 一、二叉树的深度 int BTreeHeight(BTNode* root) {if (root NULL)return 0;int rightHeight BTreeHeight(root->right);int leftHeight BTreeHeight(root->left);retur…

生态系统碳循环模型CENTURY建模方法应用

CENTURY模型,主要基于过程的陆地生态系统生物地球化学循环模型。主要用于模拟不同土壤-植被系统间C、N、P和S的长期动态。根据土壤有机质的分解速率,CENTURY模型将土壤总有机碳(TOC)分成了三个碳库,即活性、慢性和惰性…

STM32(13)串口

串口的数据帧 1.空闲 2.起始位 3.数据位 4.校验位(可有可无) 为了验证数据传输是否出错而设立的比特位 1和4传输方式比较常见 校验规则: 根据1的个数,校验位会自己补0或1 5.停止位 例子: 同步通信 异步通信 波特率 …

IIS发布PHP网站字体404解决办法

最近在使用 IIS 发布 PHP 网站时,我遇到了一个前端问题,即字体库文件 404 错误。这个问题的根本原因是 IIS 未能正确识别字体文件类型,导致浏览器在加载页面时无法正确获取所需字体资源,进而触发了404错误。这样的问题会导致网站页…

基于嵌入式的车载导航定位系统设计

一、前言 1.1 项目介绍 【1】项目背景 随着汽车工业的飞速发展和智能化技术的不断突破,车载导航系统作为现代汽车不可或缺的一部分,在人们的日常生活中扮演着越来越重要的角色。它不仅能够提供精确的路线导航,还能提供丰富的地理信息和娱乐…

RAC集群日常维护

RAC的启停 cd /u01/app/19.3.0/grid/bin 停止 ./crsctl stop crs 检查 ./crsctl check crs 启动,可以两个节点同时启动 ./crsctl start crs 检查 ./crsctl check crs ./crsctl status res -t oracle的RAC日常维命令 集群状态检查命令 cractl status res …

nginx主动检测后端健康模块

一、前言 nginx也有自带的后端检测模块ngx_http_upstream_module,该模块可以做到基本的健康检查,因为该健康检查是被动的,当nginx有请求后,才会对后端服务进行健康检测,当检测到有故障时会将这个请求转发到正常的后端服…

基于springboot的助农管理系统的设计与实现

** 🍅点赞收藏关注 → 私信领取本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅** 一 、设计说明 1.1研究背…

yolov8-更换卷积模块-ContextGuidedBlock_Down

源码解读 class ContextGuidedBlock_Down(nn.Module):"""the size of feature map divided 2, (H,W,C)---->(H/2, W/2, 2C)"""def __init__(self, nIn, dilation_rate2, reduction16):"""args:nIn: the channel of input fea…

保护模式笔记九 中断门和IDT(中断描述符表)

保护模式笔记九 中断门和IDT(中断描述符表) https://www.52pojie.cn/thread-1455684-1-1.html (出处: 吾爱破解论坛) 前言 所有保护模式索引链接:保护模式笔记一 保护模式介绍 前面学习了调用门之后继续学习中断门 中断门 中断门的作用 先前学习的调用门在实际…