zoukankan      html  css  js  c++  java
  • Redisson 分布式锁源码 11:Semaphore 和 CountDownLatch

    前言

    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 维护一个公共的变量,然后进行原子更新即可。

    相关推荐

    作者: 刘志航

    公众号:『 程序员小航 』

    版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Notes

  • 相关阅读:
    Using Spark's "Hadoop Free" Build
    关于Consul
    关于Eureka
    关于Gateway
    关于Ribbon
    关于Hystrix
    关于Feign
    关于SpringBoot
    关于架构
    关于敏捷开发Scrum(一)
  • 原文地址:https://www.cnblogs.com/liuzhihang/p/15015658.html
Copyright © 2011-2022 走看看