【简说八股】Redisson的守护线程是怎么实现的
Redisson
Redisson 是一个 Java 语言实现的 Redis SDK 客户端,在使用分布式锁时,它就采用了「自动续期」的方案来避免锁过期,这个守护线程我们一般也把它叫做「看门狗」线程。
Redission是一个在Java环境中使用的开源的分布式缓存和分布式锁实现,基于Redis数据库。在Redission中,守护线程并不是一个特定的概念,但是它提供了一些功能,可以通过后台线程来实现类似于守护线程的行为。
-
后台任务:Redission使用了一些后台任务来维护锁的状态或者其他缓存数据的一致性。例如,Redission会定时检查和更新锁的信息,确保锁在持有者释放后能被正确清理。
-
锁自动延期:当使用Redission的锁时,可以设置一个看门狗(watchdog)机制,这是一个后台线程,它会定期检查并延长锁的持有时间。如果在锁自动释放前,业务线程还在执行,看门狗会自动续期锁,防止锁因为业务执行时间过长而被意外释放。
// 获取锁对象
RLock lock = redisson.getLock("anyLock");
// 尝试获取锁,并设置锁的过期时间,同时开启看门狗进行自动续期
lock.lock(10, TimeUnit.SECONDS);
- 事件监听和清理:Redisson 允许设置事件监听器,如锁释放事件。后台线程监听这些事件并进行相关清理工作,确保系统资源有效回收。
以下是实现守护线程行为的几个关键点:
- setDaemon方法:
Redisson 中没有直接创建 Java 守护线程,但后台任务类似守护线程,会在主线程结束后退出。 - 资源清理:
当 JVM 关闭或最后一个非守护线程结束时,守护线程负责清理资源,如释放所有锁。 - 异常处理:
异常"attempt to unlock lock, not locked by current thread by node id"通常表示尝试释放未被当前线程持有的锁,需要在释放锁前检查持有情况。
总结来说,Redission并没有明确地创建Java守护线程,但是它通过后台任务和看门狗机制,实现了守护线程类似的功能,来维护分布式锁和缓存的一致性和可靠性。这些机制保证了即使在高并发和分布式环境下,资源也能被正确管理和清理。
看门狗线程
Redisson 在处理分布式锁时采用了自动续期的机制,通常称为「看门狗」线程。这个看门狗线程负责定期检查并延长锁的持有时间,以避免锁在业务执行过程中过期而被释放。通过看门狗线程的自动续期功能,Redisson 确保了分布式锁在需要时能够持续有效地保持锁定状态。
看门狗机制通常用于分布式系统中的锁管理,特别是在使用分布式锁时非常有用。它的主要作用是定期检查并续期锁的有效时间,以确保在业务处理时间较长或发生异常情况时,锁能够持续有效。
在分布式系统中,由于网络延迟、节点故障等原因,锁的持有时间可能会超出预期,为了避免因此导致锁被意外释放,就需要引入看门狗机制来对锁进行定时续期。具体来说,看门狗机制的工作流程一般包括以下几个步骤:
- 锁持有者获取锁后,设置一个自动过期时间(TTL)。
- 看门狗定期检查锁的状态,并在接近过期时自动续期锁的持有时间。
- 如果锁的持有者因为某种原因无法正常续期锁,看门狗也会负责清理过期的锁,以避免资源泄露。
在 Redisson 中,就采用了看门狗机制来实现分布式锁的自动续期功能。这样一来,在使用分布式锁时,即使业务处理时间较长或发生异常情况,也能够通过看门狗机制确保锁的持续有效,从而提高系统的稳定性和可靠性。

如想更加深入理解Redis分布式锁,可以仔细看看这篇文章:一文讲透 Redis 分布式锁安全问题
相关文章:
【简说八股】Redisson的守护线程是怎么实现的
Redisson Redisson 是一个 Java 语言实现的 Redis SDK 客户端,在使用分布式锁时,它就采用了「自动续期」的方案来避免锁过期,这个守护线程我们一般也把它叫做「看门狗」线程。 Redission是一个在Java环境中使用的开源的分布式缓存和分布式锁实…...
WPS/Office 好用的Word插件-查找替换
例如:一片文档:…………泰山…………泰(少打了山字)………… 要是把“泰”查找替换为“泰山”,就会把前面的“泰山”变成“泰山山”,这种问题除了再把“泰山山”查找替换为“泰山”,有没有更简单…...
Go 简单设计和实现可扩展、高性能的泛型本地缓存
相信大家对于缓存这个词都不陌生,但凡追求高性能的业务场景,一般都会使用缓存,它可以提高数据的检索速度,减少数据库的压力。缓存大体分为两类:本地缓存和分布式缓存(如 Redis)。本地缓存适用于…...
Vue.js 深度解析:模板编译原理与过程
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...
Java多线程——如何保证原子性
目录 引出原子性保障原子性CAS 创建线程有几种方式?方式1:继承Thread创建线程方式2:通过Runnable方式3:通过Callable创建线程方式4:通过线程池概述ThreadPoolExecutor API代码实现源码分析工作原理:线程池的…...
stm32消息和邮箱使用
邮箱管里介绍 邮箱是C/OS-II中另一种通讯机制,它可以使一个任务或者中断服务子程序向另一个任务发送一个指针型的变量。该指针指向一个包含了特定“消息”的数据结构。为了在C/OS-II中使用邮箱,必须将OS_CFG.H中的OS_MBOX_EN常数置为1。使用邮箱之前,必须先建立该邮箱。该操…...
银行数字化转型导师坚鹏:银行数字化转型案例研究
银行数字化转型案例研究 课程背景: 数字化背景下,很多银行存在以下问题: 不清楚银行科技金融数智化案例? 不清楚银行供应链金融数智化案例? 不清楚银行普惠金融数智化案例? 不清楚银行跨境金融数智…...
142.乐理基础-音程的构唱练习
内容参考于:三分钟音乐社 上一个内容:141.乐理基础-男声女声音域、模唱、记谱与实际音高等若干问题说明-CSDN博客 本次内容最好去看视频: https://apphq3npvwg1926.h5.xiaoeknow.com/p/course/column/p_5fdc7b16e4b0231ba88d94f4?l_progra…...
【比较mybatis、lazy、sqltoy、mybatis-flex操作数据】操作批量新增、分页查询(二)
orm框架使用性能比较 环境: idea jdk17 spring boot 3.0.7 mysql 8.0比较mybatis、lazy、sqltoy、mybatis-flex操作数据 测试条件常规对象 orm 框架是否支持xml是否支持 Lambda对比版本mybatis☑️☑️3.5.4sqltoy☑️☑️5.2.98lazy✖️☑️1.2.4-JDK17-SNAPS…...
每日OJ题_链表②_力扣24. 两两交换链表中的节点
目录 力扣24. 两两交换链表中的节点 解析代码 力扣24. 两两交换链表中的节点 24. 两两交换链表中的节点 难度 中等 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即&…...
C语言数据类型详解及相关题——各种奇奇怪怪的偏难怪
文章目录 一、C语言基本数据类型溢出 二、存储原理符号位原码反码补码补码操作的例子 三、赋值中的类型转换常见返回类型——巨坑总结 一、C语言基本数据类型 溢出 因为数据范围(即存储单元的位的数量)的限制,可以表达的位数是有限的。 溢出…...
经典语义分割(二)医学图像分割模型UNet
经典语义分割(二)医学图像分割模型UNet 我们之前介绍了全卷积神经网络( FCN) ,FCN是基于深度学习的语义分割算法的开山之作。 今天我们介绍另一个语义分割的经典模型—UNet,它兼具轻量化与高性能,通常作为语义分割任务的基线测试模型&#x…...
三天学会阿里分布式事务框架Seata-seata事务日志mysql持久化配置
锋哥原创的分布式事务框架Seata视频教程: 实战阿里分布式事务框架Seata视频教程(无废话,通俗易懂版)_哔哩哔哩_bilibili实战阿里分布式事务框架Seata视频教程(无废话,通俗易懂版)共计10条视频&…...
C语言-简单实现单片机中的malloc示例
概述 在实际项目中,有些单片机资源紧缺,需要mallloc内存,库又没有自带malloc函数时,此时,就需要手动编写,在此做个笔录。(已在项目上使用),还可进入对齐管理机制。 直接…...
外包干了2年,技术退步明显
先说一下自己的情况,研究生,19年进入广州某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…...
计算机网络面经-HTTPS加密过程
前言 在上篇文章HTTPS详解一中,我已经为大家介绍了 HTTPS 的详细原理和通信流程,但总感觉少了点什么,应该是少了对安全层的针对性介绍,那么这篇文章就算是对HTTPS 详解一的补充吧。还记得这张图吧。 HTTPS 和 HTTP的区别 显然&am…...
2024年最佳硬盘!为台式电脑、NAS等产品量身定做的顶级机械硬盘
机械硬盘(HDD)可能看起来像是古老的技术,但它们仍然在许多地方提供“足够好”的性能,并且它们很容易以同等的价格提供最多的存储空间。 尽管最好的SSD将为你的操作系统和引导驱动器提供最好的体验,并提供比HDD更好的应…...
串的匹配算法——BF算法(朴素查找算法)
串的模式匹配:在主串str的pos位置查找子串sub,找到返回下标,没有找到返回-1。 1.BF算法思想 相等则继续比较,不相等则回退;回退是i退到刚才位置的下一个(i-j1);j退到0;利用子串是否…...
数据处理分类、数据仓库产生原因
个人看书学习心得及日常复习思考记录,个人随笔。 数据处理分类 操作型数据处理(基础) 操作型数据处理主要完成数据的收集、整理、存储、查询和增删改操作等,主要由一般工作人员和基层管理人员完成。 联机事务处理系统ÿ…...
【力扣100】 118.杨辉三角
添加链接描述 思路: 递推公式是[n,x][n-1,x-1][n-1,x] class Solution:def generate(self, numRows: int) -> List[List[int]]:if numRows1:return [[1]]if numRows2:return [[1],[1,1]]res[[1],[1,1]]for i in range(2,numRows): # i代表的是层数的下标&…...
基于改进型PCNN的不规则图像自适应分割算法研究
基于改进型PCNN的不规则图像自适应分割算法研究根据论文中的相关内容,以下是使用不同方法解决图像分割问题并进行改进的研究:冯登超等人提出了基于改进型脉冲耦合神经网络(PCNN)的自适应分割算法。他们在原有PCNN模型的基础上对神…...
AgentOps:AI Agent可观测性平台,解决LLM应用开发调试难题
1. 项目概述:从“AI Agent”到“AgentOps”的工程化跃迁如果你最近在折腾AI Agent,或者正带领团队尝试将大语言模型(LLM)的能力集成到你的产品流程中,那你大概率会遇到一个共同的瓶颈:开发调试过程像在“开…...
基于OpenClaw与Railway的自动化部署实践:从原理到实战
1. 项目概述:一个基于OpenClaw的铁路系统自动化工具最近在GitHub上闲逛,发现了一个挺有意思的项目,叫Mattslayga/openclaw-railway。光看这个名字,可能有点摸不着头脑,又是“OpenClaw”又是“Railway”的。简单来说&am…...
ICC II时钟树综合(CTS)前,这5个NDR和约束设置没做好,后期时序肯定崩
ICC II时钟树综合前的5个致命陷阱:NDR与约束设置实战指南 时钟树综合(CTS)是数字后端设计中最关键的阶段之一,而90%的后期时序问题往往源于CTS前的配置疏漏。本文将深入剖析五个最容易被忽视却影响深远的设置环节,结合…...
实战配置:5个提升MPC-HC播放器性能的专业技巧
实战配置:5个提升MPC-HC播放器性能的专业技巧 【免费下载链接】mpc-hc MPC-HCs main repository. For support use our Trac: https://trac.mpc-hc.org/ 项目地址: https://gitcode.com/gh_mirrors/mpc/mpc-hc Media Player Classic - Home Cinema࿰…...
终极指南:如何使用Legacy-iOS-Kit让旧iPhone重获新生
终极指南:如何使用Legacy-iOS-Kit让旧iPhone重获新生 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to restore/downgrade, save SHSH blobs, jailbreak legacy iOS devices, and more 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit 你…...
DaVinci Developer与Configurator Pro联调指南:如何高效设计SWC并集成到ECU工程
DaVinci Developer与Configurator Pro联调实战:从SWC设计到ECU集成的全流程解析 在汽车电子控制单元(ECU)开发领域,工具链的协同效率直接决定了项目进度和质量。作为Vector公司AUTOSAR工具链的核心组件,DaVinci Develo…...
HS2-HF_Patch终极指南:一键为Honey Select 2安装完整增强补丁
HS2-HF_Patch终极指南:一键为Honey Select 2安装完整增强补丁 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch HS2-HF_Patch是专为《Honey Select 2》…...
通用框架操作系统:统一异构应用框架的运行时与治理平台
1. 项目概述:一个面向未来的通用框架操作系统最近在开源社区里,一个名为TELLEBO/universal-framework-os的项目引起了我的注意。乍一看这个标题,可能会觉得有点“大词”堆砌的感觉——“通用”、“框架”、“操作系统”,每一个词单…...
百度网盘直链解析工具:告别限速,实现高速下载的Python解决方案
百度网盘直链解析工具:告别限速,实现高速下载的Python解决方案 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 在数字资源共享日益频繁的今天ÿ…...
