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

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 前面已经了解到了,可重入锁加锁,看门狗以及锁的互斥阻塞。当锁加锁成功之后,锁是如何释放的?

前言


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

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


主动释放

源码入口: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 指定时间自动过期。


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
1月前
|
NoSQL 算法 安全
Redlock 算法-主从redis分布式锁主节点宕机锁丢失的问题
Redlock 算法-主从redis分布式锁主节点宕机锁丢失的问题
154 0
|
6月前
|
运维 NoSQL 安全
Redisson分布式锁最基础内容
Redisson分布式锁最基础内容
51 0
|
存储 关系型数据库 MySQL
分布式事物【悲观锁、乐观锁、读锁、写锁、间隙锁、临键锁 、 表锁、行锁、页面锁、 如何避免死锁】(二)-全面详解(学习总结---从入门到深化)
分布式事物【悲观锁、乐观锁、读锁、写锁、间隙锁、临键锁 、 表锁、行锁、页面锁、 如何避免死锁】(二)-全面详解(学习总结---从入门到深化)
48 0
|
17天前
|
缓存 NoSQL 数据库
关于高并发下缓存失效的问题(本地锁 && 分布式锁 && Redission 详解)
关于高并发下缓存失效的问题(本地锁 && 分布式锁 && Redission 详解)
30 0
|
1月前
|
NoSQL Java Redis
Redis分布式锁和Java锁的区别
Redis分布式锁和Java锁的主要区别在于它们的适用范围和实现机制。
41 2
|
1月前
|
运维 NoSQL Java
【Redis】6、Redisson 分布式锁的简单使用(可重入、重试机制...)
【Redis】6、Redisson 分布式锁的简单使用(可重入、重试机制...)
103 1
|
3月前
|
NoSQL Java 数据库
分布式事务的锁
分布式事务的锁
26 0
分布式事务的锁
|
3月前
|
NoSQL 算法 安全
Redis 分布式锁的正确实现原理演化历程与 Redisson 实战总结
Redis 分布式锁的正确实现原理演化历程与 Redisson 实战总结
127 1
|
3月前
|
NoSQL 应用服务中间件 Redis
分布式锁【 基于synchronized锁解决超卖问题、分布式锁解决方案、悲观锁实现的分布式锁】(二)-全面详解(学习总结---从入门到深化)
分布式锁【 基于synchronized锁解决超卖问题、分布式锁解决方案、悲观锁实现的分布式锁】(二)-全面详解(学习总结---从入门到深化)
31 1
|
3月前
|
监控 安全 Apache
Apache ZooKeeper - 使用ZK实现分布式锁(非公平锁/公平锁/共享锁 )
Apache ZooKeeper - 使用ZK实现分布式锁(非公平锁/公平锁/共享锁 )
87 1

热门文章

最新文章