Redisson 分布式锁源码 11:Semaphore 和 CountDownLatch
前言
Redisson 除了提供了分布式锁之外,还额外提供了同步组件,Semaphore 和 CountDownLatch。
Semaphore
意思就是在分布式场景下,只有 3 个凭证,也就意味着同时只会有三个线程执行业务。
设置凭证
参数列表:
- KEYS[1]:指定的 key 这里叫 semaphore
- KEYS[2]:redisson_sc:{semaphore}
- ARGV[1]:凭证数 3
这块 lua 脚本相对简单,直接设置一个 key 的 value 为 3。
获取凭证
参数列表:
- KEYS[1]:指定的 key 这里叫 semaphore
- ARGV[1]:要获取的凭证数,默认 1
这段 lua 脚本就是:
- 获取 key semaphore 的值
- 如果值大于等于 1(要获取的凭证数),对值进行递减
- 成功返回 1,失败返回 0
如果成功获取凭证,直接返回,没有获取到凭证,则自旋等待。
释放凭证
释放凭证直接对 Redis key 的值进行自增即可。
CountDownLatch
输出内容如下:
源码分析
设置门闩数量
这块都大同小异。
减少门闩数量
就是对这个值进行递减。
而 latch.await()
就是自旋获取门闩的值,直到为 0 了,然后继续往下执行。
总结
Redisson 实现分布式的 Semaphore 和 CountDownLatch 基本内容就是如此,仅仅通过在 Redis 维护一个公共的变量,然后进行原子更新即可。
需要相关资料的可以扫一扫 备注【java】
Redisson 分布式锁源码 11:Semaphore 和 CountDownLatch相关推荐
- Redis高阶使用之Redisson分布式锁源码解析
一.何为分布式锁 1.锁synchronized lock 单机锁 2.我们的一些互斥资源 不能并行执行 需要一个东西来保证是串行执行的 锁synchronized 3.分布式锁:这个锁存储一定是独立 ...
- 基于后端开发Redisson实现分布式锁源码分析解读
一.分布式锁的概念和使用场景 分布式锁是控制分布式系统之间同步访问共享资源的一种方式. 在分布式系统中,常常需要协调他们的动作.如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问 ...
- Redis进阶- Redisson分布式锁实现原理及源码解析
文章目录 Pre 用法 Redisson分布式锁实现原理 Redisson分布式锁源码分析 redisson.getLock(lockKey) 的逻辑 redissonLock.lock()的逻辑 r ...
- redis ,redisson 分布式锁深入剖析
目录 为什么要用分布式锁? 分布式锁所遵循的原则? redis 分布式锁 redis 原始分布式锁实现 加锁 释放锁 redis 分布式锁存在的问题 redisson 实现分布式锁 redisson ...
- 年轻人,看看 Redisson 分布式锁—可重入锁吧!太重要了
作者 | 李祥 责编 | 张文 来源 | 企鹅杏仁技术站(ID:xingren-tech) 引言 作为后端开发,对于所谓的线程安全.高并发等一系列名词肯定都不会陌生,相关的一些概念及技术框架是面 ...
- Jmeter Springboot Redisson分布式锁并发订单操作(下单、取消单、完成单、加库存)
Jmeter+Springboot+Redisson分布式锁并发订单操作(下单.取消单.完成单.加库存) 涉及知识点: java+springboot+mybatis开发 redis分布式锁+Redi ...
- 年轻人,看看Redisson分布式锁—可重入锁吧!太重要了
1.引言 作为后端开发,对于所谓的线程安全.高并发等一系列名词肯定都不会陌生,相关的一些概念及技术框架是面试中的宠儿,也是工作中解决一些特定场景下的技术问题的银弹.今天我们就来聊聊这些银弹中的其中一枚 ...
- redisson分布式锁,实战
目录 什么时候用分布式锁? 分布式锁入门 超时设置 释放了不是自己加的锁 正确设置锁超时 加解锁代码位置有讲究 实现可重入锁 Redis Hash 可重入锁 主从架构带来的问题 什么是 Redlock ...
- Redisson分布式锁详解
概述 setnx分布式锁的问题 重入问题 重入问题是指获得锁的线程可以再次进入到相同的锁的代码块中,可重入锁的意义在于防止死锁,比如HashTable这样的代码中,它的方法都是使用synchroniz ...
最新文章
- RDKit:运用RDKit计算USRCAT
- MVC,MVP,MVVM设计模式的比较
- html粘贴excel内容,如何用JS解析剪切板里的excel内容
- Python教程:Sys 与 Import 模块
- Linux上压缩目录以及目录下的所有文件
- 数据结构之---二叉树C实现
- linux android gradle构建机器 error while loading shared libraries: libz.so.1: cannot open shared object
- [安卓基础] 008.Android中的显示单位
- SoftReference和WeakReference
- android 自定义域名,Android基于Retrofit2改造的可设置多域名的网络加载框架
- Kali Linux 秘籍 第五章 漏洞评估
- zul页面报org.xml.sax.SAXParseException
- 腾讯手机管家android版,腾讯手机管家上线Android8.11.0版本
- win10桌面计算机打不开,win10“此电脑”双击打不开,任何文件夹都打不开
- 计算机基础及photoshop的应用,计算机基础及Photoshop应用
- 数据库系统原理学习笔记三(关系数据模型的组成要素)
- [unix] Unix 是简单的,你不需要成为一个天才或是计算机专家也能理解它!
- 项目管理知识体系系指南学习总结(一)
- java多数据库开发evn,Java,在多线程evnironments中通过散列统一划分传入的工作
- 帧定格(用于定格画面添加字幕或者图片)
热门文章
- 如何入门生信Linux
- 3寸以上java手机_7寸屏手机有哪些(堪称性价比之王的四款手机)
- pandas使用fillna函数并设置bfill参数使用列中的后序值填充缺失值
- R语言Kaplan-Meier绘制生存分析、Log-rank假设检验、Cox回归曲线实战案例:恶性黑色素瘤的术后数据生存分析
- R语言CRAN不包含的安装包下载并手动使用RStudio进行安装实战:以下载VRPM包及绘制彩色列线图为例
- python代码读取文件并将文件反序存入另外一个文件
- 生物信息学是干啥的?
- 各种机器学习方法的优缺点
- java opennlp_使用opennlp进行文档分类
- loguru log 日志的使用