1.获取锁

lock入参:
keys[1]:自定义锁的key  RLock lock = redissonClient.getLock(lockKey);
argv[1]=锁的租期,默认30s  
argv[2]=锁的名称(UUID:threadId)

if(exists keys[1]==0  1.不存在key锁) then
hset keys[1] argv[2] 1  赋值 key field value-->1.1尝试获取锁
pexpire keys[1] argv[1] 过期 expire key time-->1.2设置锁过期时间
return 空;
end

if(hexists keys[1] argv[2]==1  存在Key name 的锁--》2.当前线程已获取锁) then
hincrby keys[1] argv[2] 1    -->2.1原子计数器+1  锁重入!!!
pexpire keys[1] argv[1]  过期-->2.2重置锁过期时间
return 空;
end

return pttl keys[1]-->3.返回剩余过期时间

ps:lua脚本数组下标从1开始

2.释放锁

unlock入参:
keys[1]:自定义锁的key  RLock lock = redissonClient.getLock(lockKey);
keys[2]:通道名称  redisson_lock__channel:{UUID:threadId}
argv[1]= publish unlock消息=0
argv[2]=锁的租期,默认30s
argv[3]=锁的名称(UUID:threadId)

if(hexists keys[1] argv[3]==0-->1.不存在key锁,直接返回) then
return 空

counter=hincrby keys[1] argv[3] -1-->2.存在锁,原子计数器-1

if(counter>0) then pexpire KEYS[1] ARGV[2]-->2.1 计数器>0,还有锁没释放,重置锁过期时间
return 0;

else -->2.2计数器=0,锁已经全部释放完毕。
del KEYS[1]-->删除key
publish KEYS[2] ARGV[1]-->发布消息 publish channel message
return 1;
end
return 空;

redisson分布式锁lua脚本翻译的更多相关文章

  1. Redisson 分布式锁实现之前置篇 → Redis 的发布/订阅 与 Lua

    开心一刻 我找了个女朋友,挺丑的那一种,她也知道自己丑,平常都不好意思和我一块出门 昨晚,我带她逛超市,听到有两个人在我们背后小声嘀咕:"看咱前面,想不到这么丑都有人要." 女朋友 ...

  2. Redisson分布式锁实现

    转: Redisson分布式锁实现 2018年09月07日 15:30:32 校长我错了 阅读数:3303   转:分布式锁和Redisson实现 概述 分布式系统有一个著名的理论CAP,指在一个分布 ...

  3. Redisson 分布式锁实战与 watch dog 机制解读

    Redisson 分布式锁实战与 watch dog 机制解读 目录 Redisson 分布式锁实战与 watch dog 机制解读 背景 普通的 Redis 分布式锁的缺陷 Redisson 提供的 ...

  4. 又长又细,万字长文带你解读Redisson分布式锁的源码

    前言 上一篇文章写了Redis分布式锁的原理和缺陷,觉得有些不过瘾,只是简单的介绍了下Redisson这个框架,具体的原理什么的还没说过呢.趁年前项目忙的差不多了,反正闲着也是闲着,不如把Rediss ...

  5. Redisson 分布式锁源码 02:看门狗

    前言 说起 Redisson,比较耳熟能详的就是这个看门狗(Watchdog)机制. 本文就一起看看加锁成功之后的看门狗(Watchdog)是如何实现的? 加锁成功 在前一篇文章中介绍了可重入锁加锁的 ...

  6. Redisson 分布式锁实现之源码篇 → 为什么推荐用 Redisson 客户端

    开心一刻 一男人站在楼顶准备跳楼,楼下有个劝解员拿个喇叭准备劝解 劝解员:兄弟,别跳 跳楼人:我不想活了 劝解员:你想想你媳妇 跳楼人:媳妇跟人跑了 劝解员:你还有兄弟 跳楼人:就是跟我兄弟跑的 劝解 ...

  7. Redisson 分布式锁源码 09:RedLock 红锁的故事

    前言 RedLock 红锁,是分布式锁中必须要了解的一个概念. 所以本文会先介绍什么是 RedLock,当大家对 RedLock 有一个基本的了解.然后再看 Redisson 中是如何实现 RedLo ...

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

    前言 Redisson 除了提供了分布式锁之外,还额外提供了同步组件,Semaphore 和 CountDownLatch. Semaphore 意思就是在分布式场景下,只有 3 个凭证,也就意味着同 ...

  9. Redisson分布式锁学习总结:可重入锁 RedissonLock#lock 获取锁源码分析

    原文:Redisson分布式锁学习总结:可重入锁 RedissonLock#lock 获取锁源码分析 一.RedissonLock#lock 源码分析 1.根据锁key计算出 slot,一个slot对 ...

  10. redisson分布式锁原理剖析

    redisson分布式锁原理剖析 ​ 相信使用过redis的,或者正在做分布式开发的童鞋都知道redisson组件,它的功能很多,但我们使用最频繁的应该还是它的分布式锁功能,少量的代码,却实现了加锁. ...

随机推荐

  1. Keepalive-Haproxy高可用介绍

    假设我们现在开发了一个应用应用的端口号为 8080,这个应用我们想让它去实现一个负载均衡的访问,就是说我们有两台服务器都部署了我们的 8080 应用,我们想让它一会访问 ip 为: 192.168.0 ...

  2. python实现GUI自动化(控制鼠标)|屏幕快照&图像识别基础

    1.GUI自动化 ●GUI自动化就是写程序直接控制键盘和鼠标.这些程序可以控制其他应用,向它们发送虚拟的击键和鼠标点击,就像你自己坐在计算机前与应用交互-样.这种技术被称为"图形用户界面自动 ...

  3. ROS节点通信(二)service和client

    目录 1.说明 2.创建功能包 3.自定义通信数据类型 4.编写代码 5.编译配置 5.1.CMakeLists.txt 5.2.package.xml 6.编译运行 1.说明 ROS的节点通信模式有 ...

  4. Java Calendar 多用,日期 加减

    服务需要订购一个月,订购一个月 不等于增加 30天:若是1,3,5的话应该 31天,要善用 Calendar public static void main(String[] args) throws ...

  5. Linux-编译源码时所需提前安装的常用依赖包列表

    编译源码时所需提前安装的常用依赖包列表: yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel f ...

  6. JS LeetCode 566. 重塑矩阵题解分析,数组降维的几种方式

    壹 ❀ 引 今天是过完年到公司的第二天,年前因为封版,到今天我们小组是第一个发版的组,然后就各种踩坑,到现在还在公司等运维解决jenkins问题,闲着也是闲着,做一道算法题,简单记录下解题思路,本题来 ...

  7. 从零开始的react入门教程(四),了解常用的条件渲染、列表渲染与独一无二的key

    壹 ❀ 引 在从零开始的react入门教程(三),了解react事件与使用注意项一文中,我们了解了react中事件命名规则,绑定事件时对于this的处理,以及事件中可使用的e对象.那么这篇文章中我们来 ...

  8. Ubuntu20.04和22.04离线安装PostgreSQL14

    今天安装 Postgresql14 遇到一个问题, 目标服务器只有内网, 内网提供标准的apt仓库, 但是因为不能连接外网, 所以没法添加第三方仓库, 这样安装pg14就成了问题. 从pg的官网看, ...

  9. 【Unity3D】Shader常量、变量、结构体、函数

    1 源码路径 ​ Unity Shader 常量.变量.结构体.函数一般可以在 Unity Editor 安装目录下面的[Editor\Data\CGIncludes\UnityShader]目录下查 ...

  10. Optional 详解

    1 前言 Optional 是 Java 8 的新特性,专治空指针异常(NullPointerException, 简称 NPE)问题,它是一个容器类,里面只存储一个元素(这点不同于 Conllect ...