【八股】Redisson分布式锁

Redisson分布式锁

主要了解了Redisson分布式锁实现的三个功能:
1.可重入 -> 防止死锁
2.可重试(i.e. 非阻塞获取锁)
3.自动续约

1. 可重入

原理:
利用Redis的Hash结构,记录了使用当前锁的线程id和重用次数,避免了可能造成的死锁问题。
存储的锁的内容如下图所示:
在这里插入图片描述

2. 可重试

不会一直去重试获取锁造成cpu资源的浪费 ,而是通过pubsub还有信号量的机制,实现了只有当别的线程释放锁,才会唤醒当前未成功获取锁的线程继续去尝试获取锁,
Redis的pubsub机制:在这里插入图片描述

信号量:
在这里插入图片描述

3. 自动续约 (看门狗机制)

只有当我们不指定leaseTime,也就是不指定持有锁的时间长度时,才会启动看门狗机制。如下图所示:
在这里插入图片描述

默认的看门狗机制时把持有锁的剩余时长指定为30秒,然后每过leaseTime的1/3,默认就是10秒,就会重置持有锁的剩余时长为30秒。我们也可以修改Redisson的配置,把默认持有锁时长30s改成自己想要的时长。

看门狗机制的实现如下:
在这里插入图片描述
有个方法(renewExpiration)会启用一个延时任务,每次过了 1/3 leastTime时就会重置持有锁的TTL,重置完只有然后再调用自己,就实现了不断给锁续约的效果。

参考文章:

redisson中的看门狗机制总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/823671.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统——Elasticsearch企业级日志分析系统

目录 前言 一、ELK概述 1.ELK简介 2.ELK特点 3.为什么要使用ELK 4.完整日志系统基本特征 5.ELK工作原理 6.Elasticsearch介绍 6.1Elasticsearch概述 6.2Elasticsearch核心概念 7.Logstash介绍 7.1Logstash简介 7.2Logstash主要组件 8.Kibana介绍 8.1Kibana简介 …

考研数学|「基础」和「强化」阶段分别怎么做?

从目前考研数学的趋势来看,更加注重数学基础的理解和计算量。也就是基础知识和计算,如何锻炼这两种能力就显得尤为重要。希望我的复习经验可以给到读者一些启发。 数学规划 从备考过程来看,数学的复习可以分为三个阶段:1、基础阶…

监控系统Prometheus--与第三方框架集成

文章目录 Prometheus和Flink集成拷贝jar包修改Flink配置为了运行测试程序,启动netcat启动hdfs、yarn,提交flink任务到yarn上可以通过8088跳到flinkUI的job页面,查看指标统计刷新Prometheus页面,如果有flink指标,集成成…

linux线程的同步

目录 1.死锁概念 2.接口 3.代码展示 1.死锁概念 死锁的四个必要条件(必须同时满足): 1.互斥条件:一个资源每次只能被一个执行流使用(前提)。 2.请求与保持条件:一个执行流因请求资源而堵塞…

PHP 生成压缩包、读取压缩包

1. PHP 生成压缩包 下面是 PHP 将本地文件生成压缩包的核心代码,在此基础上可进行扩展封装 // 压缩包名称$name test.zip;// 创建压缩包对象$zip new ZipArchive;// 打开压缩包$zip->open($name, ZipArchive::CREATE);// 本地文件绝对路径$path __DIR__ . /In…

如何查看Postman的版本信息?

如何查看Postman的版本信息 一、为何需要查看版本信息?二、查看Postman的版本信息的步骤 一、为何需要查看版本信息? 不同的版本之间可能存在功能和界面的差异。 二、查看Postman的版本信息的步骤 1、打开 Postman 2、打开设置项 点击页面右上角的 “…

41.缺失的第一个正数

题目描述 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。示例 1:输入:nums [1,2,0] 输出:3 解释:范围 [1,2] 中的数字都在…

clipper一些数据结构(入门初识(一))

clipper一些数据结构(一) Clipper库是一个用于执行多边形裁剪(clipping)和偏移(offsetting)操作的开源C库。在Clipper库中,点和多边形(polygon)是基本的数据结构。Clipp…

Spring-tx事务管理

第五章 Spring声明式事务 一 声明式事务概念 1.1 编程式事务 手动编写程序来管理事务,即通过编写代码的方式来实现事务的提交,和回滚。 1.2 声明式事务 声明式事务是指使用注解或配置文件来控制事务的提交和回滚。 开发者只需要添加注解或者配置文…

陇剑杯 流量分析 webshell CTF writeup

陇剑杯 流量分析 链接:https://pan.baidu.com/s/1KSSXOVNPC5hu_Mf60uKM2A?pwdhaek 提取码:haek目录结构 LearnCTF ├───LogAnalize │ ├───linux简单日志分析 │ │ linux-log_2.zip │ │ │ ├───misc日志分析 │ │ …

[SWPUCTF 2021 新生赛]error

如果 flag 只出现一半,用substr(A,B,C) 查询flag 1 and (select extractvalue(1,concat(~,(select substr((select flag from test_tb), 1 , 31))))) # 0-30位 左边30位 1and (select extractvalue(1,concat(~,(select substr((select flag from test_tb), 31 , 6…

vivado 设置 VIO 核以执行测量、查看 VIO 核状态

设置 VIO 核以执行测量 您添加到自己的设计中的 VIO 核会显示在“硬件 (Hardware) ”窗口中的目标器件下。如果未显示这些 VIO 核 , 请右键 单击器件并选择“ Refresh Hardware ”。这样将重新扫描 FPGA 或 ACAP 并刷新“ Hardware ”窗口。 注释 &#xff…

阿里云4核8G云服务器价格多少钱?700元1年

阿里云4核8G云服务器价格多少钱?700元1年。阿里云4核8G服务器租用优惠价格700元1年,配置为ECS通用算力型u1实例(ecs.u1-c1m2.xlarge)4核8G配置、1M到3M带宽可选、ESSD Entry系统盘20G到40G可选,CPU采用Intel(R) Xeon(R…

Java面试必问题41:SpringCloud五大组件是哪几个 SpringCloud 和 SpringBoot 的区别和关系

SpringCloud五大组件是哪几个 Spring Cloud是一个用于构建分布式系统的开发工具包,它提供了一系列组件来简化分布式系统的开发和管理。以下是Spring Cloud中的五个核心组件: 1. 服务注册与发现(Eureka):Eureka是一个用…

【AcWing】蓝桥杯集训每日一题Day28|组合计数|二项式定理|杨辉三角|211.计算系数(C++)

211.计算系数 211. 计算系数 - AcWing题库难度:简单时/空限制:1s / 64MB总通过数:3703总尝试数:7790来源:《算法竞赛进阶指南》NOIP2011提高组算法标签二项式定理组合计数 题目内容 给定一个多项式 ( a x b y ) k …

Eigen库从入门到放弃(1. VSCode配置及Eigen下载和安装)

最近在做后处理的事情。每次看到Python那么酷炫的切片、矩阵乘法、广播,再看看C,我就陷入无尽痛苦。为什么Numpy没有C版本,为什么后处理都是手撸,Eigen库有很多方法可以平替Numpy,但是我不是很了解,都是现查…

久吾高科技股份有限将莅临2024第13届生物发酵展

参展企业介绍 江苏久吾高科技股份有限公司成立于1997年,是一家专注从事新材料研发与整体解决方案的高科技企业。2017年3月在深交所A股创业板上市。公司是首批认定的guojiaji高新技术企业、国家专精特新“小巨人”企业、国家制造业单项、中国膜行业陶瓷膜领域龙头企…

使用vite从头搭建一个vue3项目(三)vite.config.js配置

目录 一、声明环境变量配置文件二、vite.config.js基础配置1、defineConfig()、loadEnv()2、plugins配置项3、server配置项4、resolve配置项5、css配置项6、build配置项 三、vite.config.js配置完整代码 VITE版本:v5.2.8 一、声明环境变量配置文件 在根目录下新建…

pta L1-045 宇宙无敌大招呼

L1-045 宇宙无敌大招呼 分数 5 全屏浏览 切换布局 作者 陈越 单位 浙江大学 据说所有程序员学习的第一个程序都是在屏幕上输出一句“Hello World”,跟这个世界打个招呼。作为天梯赛中的程序员,你写的程序得高级一点,要能跟任意指定的星球…

Qt 系统相关

这里写目录标题 Qt 事件事件介绍事件的处理按键事件单个按键组合按键 ⿏标事件⿏标单击事件⿏标释放事件⿏标双击事件⿏标移动事件滚轮事件 定时器QTimerEvent 类QTimer 类获取系统⽇期及时间 事件分发器概述事件分发器⼯作原理 事件过滤器 Qt ⽂件Qt ⽂件概述输⼊输出设备类⽂…