写点什么

Redisson 分布式锁源码 11:Semaphore 和 CountDownLatch

发布于: 10 分钟前

前言

Redisson 除了提供了分布式锁之外,还额外提供了同步组件,Semaphore 和 CountDownLatch。

Semaphore


意思就是在分布式场景下,只有 3 个凭证,也就意味着同时只会有三个线程执行业务。

设置凭证


参数列表:


  1. KEYS[1]:指定的 key 这里叫 semaphore

  2. KEYS[2]:redisson_sc:{semaphore}

  3. ARGV[1]:凭证数 3


这块 lua 脚本相对简单,直接设置一个 key 的 value 为 3。


获取凭证


参数列表:


  1. KEYS[1]:指定的 key 这里叫 semaphore

  2. ARGV[1]:要获取的凭证数,默认 1


这段 lua 脚本就是:


  1. 获取 key semaphore 的值

  2. 如果值大于等于 1(要获取的凭证数),对值进行递减

  3. 成功返回 1,失败返回 0



如果成功获取凭证,直接返回,没有获取到凭证,则自旋等待。

释放凭证


释放凭证直接对 Redis key 的值进行自增即可。

CountDownLatch


输出内容如下:


源码分析

设置门闩数量




这块都大同小异。


减少门闩数量



就是对这个值进行递减。


latch.await() 就是自旋获取门闩的值,直到为 0 了,然后继续往下执行。

总结

Redisson 实现分布式的 Semaphore 和 CountDownLatch 基本内容就是如此,仅仅通过在 Redis 维护一个公共的变量,然后进行原子更新即可。

相关推荐

发布于: 10 分钟前阅读数: 2
用户头像

个人公众号:『 程序员小航 』 2020.07.30 加入

某不知名互联网公司 Java 程序员一枚。记录工作学习中的技术、开发及源码笔记;分享生活中的见闻感悟。

评论

发布
暂无评论
Redisson 分布式锁源码 11:Semaphore 和 CountDownLatch