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

Redisson分布式锁原理

请添加图片描述

  1. 加锁流程
    调用lock(),底层执行的是一段lua脚本,相当于setnx但是使用hash结构存储数据和线程信息。
    如果 key 不存在(无锁),则加锁成功。否则失败。
    如果是同一线程重复加锁,Redisson 使用hash结构记录每个线程(uuid+线程线程id)加锁次数,实现可重入锁。

  2. 看门狗机制(Watchdog)
    默认锁过期时间是 30 秒(如未指定),如果业务还未完成,Redisson 内部有个后台线程定期(锁过期 / 3)刷新 TTL,只有加锁线程还持有锁,续期才会生效。

  3. 解锁流程
    调用 unlock() 方法时,Redisson 会执行 也会Lua 脚本
    多线程加锁场景中,Redisson 用 Hash 保存线程与重入次数。解锁时,只有持有锁的线程才能真正删除

锁被持有期间有其他线程来获取锁
lua返回锁的ttl,想获取锁的线程会先尝试一次(非公平锁),然后在while循环中阻塞ttl秒的时间,继续获取锁。如果持有锁的线程提前完成了会通过发布订阅去唤醒其他等待锁的线程。

http://www.xdnf.cn/news/9126.html

相关文章:

  • 提升系统性能:Windows绿色版管理工具的实用指南
  • 红海云荣膺2025人力资源科技影响力品牌30强
  • IPD流程落地:项目任务书Charter开发
  • (2025.05)ubuntu20.04运行Mono-gs记录
  • android实现使用RecyclerView详细
  • 大模型微调(4):使用 AutoClass 管理 Tokenizer 和 Model
  • 航电系统之协同坐标技术篇
  • iOS 响应者链详解
  • 开发规范-Restful风格、Apifox安装与使用
  • 一、奋斗类(事业奋斗/梦想实现)
  • 三栏布局实现
  • 56页 @《人工智能生命体 新启点》中國龍 原创连载
  • 修改 K8S Service 资源类型 NodePort 的端口范围
  • Java Swing 自定义JOptionPane
  • Python面试1
  • 传输线上的信号速度与阻抗无关,主要由频率决定
  • leetcode:2160. 拆分数位后四位数字的最小和(python3解法,数学相关算法题)
  • OceanBase数据库全面解析(数据定义篇DDL)
  • numpy与matplotlib学习——数据可视化入门
  • 2025密云马拉松复盘
  • 如何实现 C/C++ 与 Python 的通信
  • sqli-labs第二十七关——Trick with selectunion
  • AI时代新词-AI芯片(AI - Specific Chip)
  • 大模型量化原理
  • vue + ant-design + xlsx 实现表格导出进度提示功能
  • 【JSON-To-Video】JSON转视频教程,快速添加配音与字幕!
  • 【Java】异常处理
  • 【C++初阶】模拟实现string(二):swap优化与写时拷贝机制
  • 知识宇宙-职业篇:互联网产品经理PM
  • Debian操作系统全面解析:从起源到应用