Redisson可重入锁

  • 可重入锁原理
  • Redisson的锁重试和WatchDog机制
  • Redisson的multiLock原理

可重入锁原理

我们自定义的分布式锁采用的是Redis的String数据类型,也就是简单地key-value。在获取锁的时候也就是执行set local thread1 NX EX 10,这个thread1也就是锁的标识,其目的就是将来在释放锁时会判断避免误删,只有锁时自己的才会去删除。那么这个流程是不能重入的。


    首先我们来看一下可重入锁的demo:首先m1会执行获取锁的操作,如果失败会报错,如果成功会调用m2。而在m2里有尝试获取锁,在m1调用m2,所以他们是在一个线程里,一个线程两次的来获取锁,这就是锁的重入。
    那在我们的分布式锁流程里,在获取锁就是设置key-value为local、thread1标识。接下来往下执行调用m2,m2会继续获取锁,那么又要执行set local thread1,因为加了NX,所以一点是失败的。所以我们是没有办法实现重入的。

参考ReentrantLock可重入锁的实现原理,它里面维护了一个阻塞队列和获得锁的次数state,在获取重入锁喉state++,运行完后–。所以我们在设计分布式锁时不仅要记录获取锁的线程,还要记录这个线程它重入锁的记录。显然String类型是不行的,所以我们需要可以存放local、thread1、state的数据结构,这摆明了就是要用Hash。获得重入锁后value++,释放锁时value–。


获取锁的Lua脚本:

释放锁的Lua:

Redisson的锁重试和WatchDog机制

刚才解决了我们自定义redis分布式锁的不可重入问题,但是还存在着锁时不可重试的,而且超时释放的隐患也没能得到解决,最后就是主从一致性的问题。

我们源码里面的tryLock时可以提供参数的,在给定的参数时间内如果没有获取到锁时可以不停的重新尝试获取锁,成功与否返回true和false。

Redisson的multiLock原理

微服务架构之:Redisson分布式可重入锁原理相关推荐

  1. GTS来了!阿里微服务架构下的分布式事务解决方案

    阿里妹导读:分布式事务已经成为微服务落地最大的阻碍,也是非常具有挑战性的一个技术难题. 为此,今天我们邀请阿里高级技术专家于皋,和大家深入探讨微服务架构下,分布式事务的各种解决方案,并重点为大家解读阿 ...

  2. 如何实现微服务架构下的分布式事务?

    摘要:微服务架构下,如何克服分布式事务难题? 什么是微服务?微服务有什么优势和困难? 什么是微服务架构? 简而言之,微服务架构的系统是一个分布式的系统,按业务进行划分为独立的服务单元,解决单体系统的不 ...

  3. 【华为云技术分享】HDC.Cloud|华为云Stack大咖说:如何实现微服务架构下的分布式事务

    离华为开发者大会2020(Cloud)开幕仅剩一月左右,让开发者们和华为大咖近距离沟通的扫地僧早午餐会也已经开放预约.但是,有些小伙伴们已经等不及到二月了,别急,福利这不就来了吗!华为云Stack混合 ...

  4. Java架构师-微服务:微服务架构【单体部署 --改造--> 微服务架构】【分布式:分散压力;微服务:分散能力】【RESTFul+Docker+K8S、SpringCloud】

    一.微服务概述 微服务架构是团队面对互联网产品爆发式增长的最优选择,要解决的是快速迭代.高可靠和高可用等问题,把复杂度很高的产品拆分成一些较小的模块,并遵循康威定律,每一个模块用5-9个小团队来维护, ...

  5. 基于 MySQL 排它锁实现分布式可重入锁解决方案

    一.MySQL 排它锁和共享锁 在进行实验前,先来了解下MySQL 的排它锁和共享锁,在 MySQL 中的锁分为表锁和行锁,在行锁中锁又分成了排它锁和共享锁两种类型. 1. 排它锁 排他锁又称为写锁, ...

  6. 从0开始的微服务架构:(一)重识微服务架构

    2019独角兽企业重金招聘Python工程师标准>>> 导语 虽然已经红了很久,但是"微服务架构"正变得越来越重要,也将继续火下去. 各个公司与技术人员都在分享微 ...

  7. Re:从0开始的微服务架构:(一)重识微服务架构--转

    原文地址:http://www.infoq.com/cn/articles/micro-service-architecture-from-zero?utm_source=infoq&utm_ ...

  8. Re:从0开始的微服务架构:(一)重识微服务架构

    导语 虽然已经红了很久,但是"微服务架构"正变得越来越重要,也将继续火下去. 各个公司与技术人员都在分享微服务架构的相关知识与实践经验,但我们发现,目前网上的这些相关文章中,要么上 ...

  9. ABP vNext微服务架构详细教程——分布式权限框架(上)

    1 简介 ABP vNext框架本身提供了一套权限框架,其功能非常丰富,具体可参考官方文档:https://docs.abp.io/en/abp/latest/Authorization 但是我们使用 ...

最新文章

  1. 摆脱“人肉”审核,从0搭建可视化SQL自动审核平台
  2. 用python-opencv实现简单的车牌定位
  3. tensorflow中的正则化解决过拟合问题
  4. 大厂疯传!Python+商业数据分析+数据可视化教程(附项目案例)
  5. vSphere 计算vMotion的迁移原理
  6. 克服SOA实施过程中的障碍
  7. P3338 [ZJOI2014]力(FFT)
  8. gprs连接中断记录_请收好!脉搏波血压计连接天天血压APP使用指南
  9. win10系统steam登陆计算机授权,steam登陆授权
  10. TSX指令集之RTM无锁并发能加快速度吗?与mutex加锁比较
  11. chrome等浏览器滚动全屏截图方法
  12. 使用MV制作最简单的游戏:我要做游戏(1)
  13. 华硕的主板装的服务器系统改win7,华硕主板win10改win7系统怎么操作
  14. Ubuntu 18.04 服务器版安装桌面及软件
  15. ROS 简单的跨浏览器通信
  16. (原创)Linux设备轮询机制分析
  17. JAVA计算机毕业设计助农脱贫系统Mybatis+源码+数据库+lw文档+系统+调试部署
  18. 算法中的『前缀和』及『差分』思想详解
  19. SciTE 编辑器汉化
  20. C++中“非常量引用的初始值必须是左值”的处理方法

热门文章

  1. 【每日一练】原生js仿淘宝主图放大镜功能,附学习源码
  2. %I64d %I64u
  3. 小米4c android4.4,小米4c 开启USB调试模式
  4. Vue中setup函数
  5. 游戏出海新机遇 :卓杭游戏携手云开发和云函数,打造小游戏出海新爆款
  6. 微鱼 php,黑锐微鱼X1系列版本纯净版 - 源码下载|Windows编程|其他小程序|源代码 - 源码中国...
  7. Protobuf 学习(二)编译proto文件并测试
  8. ios 对应 iphone_带有iOS 14的iPhone终于出现了浏览器选择
  9. Mybatis-06【MyBatis基于XML的详细使用——缓存】
  10. 创建角色、ansible-galaxy简单使用