• 【简说八股】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
    • 2
    • 3
    • 4
    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 分布式锁安全问题

  • 相关阅读:
    Python教程:with语句的用法
    【二叉树 Java】二叉树的层序遍历
    快手、抖音、视频号交战内容付费
    JAVA中的集合类型的理解及应用
    第18章_MySQL8新特性之CTE(公用表表达式)
    Linux下为网卡分配IP的工具dhclient
    ARM 堆栈寻址类型区分
    stm32---外部中断
    华为杯“华南理工大学程序设计竞赛(同步赛) A KNN算法
    003-第一代硬件系统环境搭建
  • 原文地址:https://blog.csdn.net/Z70769691/article/details/136438849