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

Redisson可重入锁原理(基于黑马视频总结,保姆级)

 上一篇文章我们基于redis的set nx ex 命令以及Lua脚本实现了基本的分布式锁,但是还存在一下几点问题。于是又引出了redisson。

 为什么基于SETNX的分布式锁无法实现可重入

先在method1中获取锁,获取成功后又调用method2,而method2内部也会获取锁。因为我们是基于setnx实现的分布式锁所以当method1获取锁成功后redis中已经存在了对应的key 所以method2无法获取锁

 实现可重入锁(用Lua脚本)

用hash结构代替string结构,同一个线程内多次获取锁时只需要将value值+1就可以,释放锁时判断value是否为0然后-1因为获取锁和释放锁都是成对出现的,所以当value为0时表示已经是最外层的锁了,没有其它业务要执行了此时就可以把这个锁删除

redisson可重入锁源码 

 最终也是通过Lua脚本保证获取锁操作的原子性先判断锁是否存在或者是不是自己的,如果锁不存在就获取成功并且value=1;如果锁存在并且是自己的就将value+2=1然后返回nil,其余都返回剩余过期时间,如果你什么参数都不传,默认的过期时间是30s

http://www.lryc.cn/news/420657.html

相关文章:

  • Ubuntu 安装 Watt-Toolkit
  • python中的省略号(...)
  • 第129天:内网安全-横向移动WmiSmbCrackMapExecProxyChainsImpacket
  • ChatGPT教我将MySQL中where find_in_set改成PostgreSQL支持的写法
  • Python命令模式:掌控你的代码指令
  • 【物联网】(防水篇)电子产品 IPX7 防水级别测试的具体流程
  • Redis 实现消息队列
  • 模板初阶(详解)
  • 对称加密算法解析:DES、AES及其在`pycryptodome` 和 `crypto-js` 模块中的应用
  • C++设计模式(代理模式)
  • Linux系统驱动(十三)Linux内核定时器
  • Visual Studio 调试时加载符号慢
  • Spring Cloud Config:动态配置的魔法师
  • Webpack入门基础知识及案例
  • 对中国人工智能与国外人工智能的思考
  • 【debian系统arm架构安装docker】且换源后依旧不行就离线导入镜像
  • Readwise 官方 Obsidian 插件使用
  • A. A+B Again?
  • pr样机模板视频素材|城市户外高速路广告牌视频样机
  • 谷歌大中华区总裁:所有企业都在问这个问题
  • GPT-4o:AI视觉识别的革命性飞跃
  • 将电脑打造成私人网盘,支持外网访问之详细操作教程
  • spring同一个接口如何分页实现主表或主+联表group by查询
  • SpringDataJpa源码分析
  • 卷积神经网络 - 卷积神经网络与深度学习的历史篇
  • 初识 Floodfall 算法
  • [Linux] LVM挂载的硬盘重启就掉的问题解决
  • YOLOv8改进 | 主干网络 | 用EfficientNet卷积替换backbone【教程+代码 】
  • 数据库规范化设计 5大基本原则
  • 【nginx】解决k8s中部署nginx转发不会自动更新域名解析启动失败的问题