Redisson 分布式锁源码 04:可重入锁释放

前言#

前面已经了解到了,可重入锁加锁,看门狗以及锁的互斥阻塞。

当锁加锁成功之后,锁是如何释放的?

主动释放#

源码入口:RedissonLock#unlock

在解锁时会获取当前线程的id。

一路往里跟,直接来到 RedissonLock#unlockInnerAsync

分析一下 lua 脚本的内容:

  1. 如果锁不存在,直接返回 null;
  2. 如果锁存在,则对锁的重入次数 -1;
    1. 剩余重入次数大于 0,重新设置过期时间,返回 0;
    2. 剩余重入次数不大于 0,删除 redis key 并发布消息,返回 1;

主动释放锁这块考虑的不仅仅是对 key 进行处理,因为可能存在重入锁,所以会先对 redis key 对应的 hash value 进行递减,相当于减去重入次数。

自动释放#

相比较主动释放,自动释放就比较容易理解了。

  1. 当服务宕机时,看门狗不再看门,那么最多 30s 之后锁被自动释放;
  2. 当设置锁的时间时,锁到了时间,自动释放。

总结#

Redisson 锁的释放分为两种:

  1. 主动释放:自己调用 API unlock 即可;
  2. 宕机/到期自动释放:Redis key 指定时间自动过期。

相关推荐#

本篇文章由一文多发平台ArtiPub自动发布

作者:程序员小航

出处:https://www.cnblogs.com/liuzhihang/p/14971499.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。


欢迎关注个人公众号:『 程序员小航 』

posted @   程序员小航  阅读(208)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu