前言 RedLock 红锁,是分布式锁中必须要了解的一个概念. 所以本文会先介绍什么是 RedLock,当大家对 RedLock 有一个基本的了解.然后再看 Redisson 中是如何实现 RedLock 的. 在文章开头先说明 Redisson RedLock 建议不要使用!!! 在文章开头先说明 Redisson RedLock 建议不要使用!!! 在文章开头先说明 Redisson RedLock 建议不要使用!!! 重要的事情重复三遍! 什么是 RedLock? RedLock,这块可以…
前言 Redisson 除了提供了分布式锁之外,还额外提供了同步组件,Semaphore 和 CountDownLatch. Semaphore 意思就是在分布式场景下,只有 3 个凭证,也就意味着同时只会有三个线程执行业务. 设置凭证 参数列表: KEYS[1]:指定的 key 这里叫 semaphore KEYS[2]:redisson_sc:{semaphore} ARGV[1]:凭证数 3 这块 lua 脚本相对简单,直接设置一个 key 的 value 为 3. 获取凭证 参数列表:…
前言 说起 Redisson,比较耳熟能详的就是这个看门狗(Watchdog)机制. 本文就一起看看加锁成功之后的看门狗(Watchdog)是如何实现的? 加锁成功 在前一篇文章中介绍了可重入锁加锁的逻辑,其中 RedissonLock#tryAcquireAsync 方法是进行异步加锁的逻辑. 回顾一下这个方法的入参: waitTime:-1: leaseTime:-1,加锁时未指定锁时间,则为 -1,如果指定,则是指定的时间: unit:null: threadId:当前线程 id. 其中的…
原文:Redisson分布式锁学习总结:可重入锁 RedissonLock#lock 获取锁源码分析 一.RedissonLock#lock 源码分析 1.根据锁key计算出 slot,一个slot对应的是redis集群的一个节点 redisson 支持分布式锁的功能,基本都是基于 lua 脚本来完成的,因为分布式锁肯定是具有比较复杂的判断逻辑,而lua脚本可以保证复杂判断和复杂操作的原子性. redisson 的 RedissonLock 执行lua脚本,需要先找到当前锁key需要存放到哪个s…
最近碰到的一个问题,Java代码中写了一个定时器,分布式部署的时候,多台同时执行的话就会出现重复的数据,为了避免这种情况,之前是通过在配置文件里写上可以执行这段代码的IP,代码中判断如果跟这个IP相等,则执行,否则不执行,想想也是一种比较简单的方式吧,但是感觉很low很low,所以改用分布式锁. 目前分布式锁常用的三种方式:1.数据库的锁:2.基于Redis的分布式锁:3.基于ZooKeeper的分布式锁.其中数据库中的锁有共享锁和排他锁,这两种都无法直接解决数据库的单点和可重入的问题,所以,本…
本文分析的ReentrantLock所对应的Java版本为JDK8. 在阅读本文前,读者应该知道什么是CAS.自旋. 由于ReentrantLock的公平锁和非公平锁中有许多共同代码,本文只会对这两种锁的不同之处加以分析,所以如果读者对公平锁不熟的话,强烈建议先看我的上篇博客——ReentrantLock之公平锁源码分析. 本文大纲 1.ReentrantLock非公平锁简介 2.lock方法 3.unlock方法 4.公平锁与非公平锁的异同 1. ReentrantLock非公平锁简介 Ree…
通过对ReentrantLock获取锁和释放锁源码跟踪主要想进一步深入学习AQS. 备注:AQS中的waitStatus状态码含义:…
ReentrantLock 源码分析   以公平锁源码解析为例: 1:数据结构: 维护Sync 对象的引用:   private final Sync sync; Sync对象继承 AQS,  Sync  分为两个类:处理公平锁锁和非公平锁: FairSync   NonfairSync 具体的类图如下: 2:接下来重点分析AQS这个类:AbstractQueuedSynchronizer: AQS中的成员变量: private transient volatile Node head;   /…
百篇博客分析|本篇为:(用户态锁篇) | 如何使用快锁Futex(上) 进程通讯相关篇为: v26.08 鸿蒙内核源码分析(自旋锁) | 当立贞节牌坊的好同志 v27.05 鸿蒙内核源码分析(互斥锁) | 同样是锁它却更丰满 v28.04 鸿蒙内核源码分析(进程通讯) | 九种进程间通讯方式速揽 v29.05 鸿蒙内核源码分析(信号量) | 谁在解决任务间的同步 v30.07 鸿蒙内核源码分析(事件控制) | 多对多任务如何同步 v33.03 鸿蒙内核源码分析(消息队列) | 进程间如何异步传递…
百篇博客分析|本篇为:(内核态锁篇) | 如何实现快锁Futex(下) 进程通讯相关篇为: v26.08 鸿蒙内核源码分析(自旋锁) | 当立贞节牌坊的好同志 v27.05 鸿蒙内核源码分析(互斥锁) | 同样是锁它却更丰满 v28.04 鸿蒙内核源码分析(进程通讯) | 九种进程间通讯方式速揽 v29.05 鸿蒙内核源码分析(信号量) | 谁在解决任务间的同步 v30.07 鸿蒙内核源码分析(事件控制) | 多对多任务如何同步 v33.03 鸿蒙内核源码分析(消息队列) | 进程间如何异步传递…