redis如何实现分布式锁?

news/2025/2/14 5:25:53/

分布式锁是为了解决什么问题?

首先,“分布式锁”的概念,是相对“本地锁”而言。
本地锁比如java中的synchronized 关键字这类 JDK 自带的 本地锁 ,来控制一个 JVM 进程内的多个线程对本地共享资源的访问。
同一时刻只有一个线程可以获取到本地锁访问共享资源。
分布式系统下,不同的服务/客户端通常运行在独立的 JVM 进程上。如果多个 JVM 进程共享同一份资源的话,使用本地锁就没办法实现资源的互斥访问了。于是,分布式锁 就诞生了。

分布式锁需要满足什么条件?

  • 互斥:任意一个时刻,锁只能被一个线程持有;
  • 高可用:(啥意思?)锁服务是高可用的。并且,即使客户端的释放锁的代码逻辑出现问题,锁最终一定还是会被释放,不会影响其他线程对共享资源的访问。
  • 可重入:一个节点获取了锁之后,还可以再次获取锁。(有什么用?)

如何基于 Redis 实现一个最简易的分布式锁?(没看懂)

用SETNX(SET if Not eXists)命令实现”互斥“。

SETNX lockKey uniqueValue
(integer) 1
SETNX lockKey uniqueValue
(integer) 0

分布式锁会有不被释放的问题吗?怎么解决?

会,设置过期时间。

127.0.0.1:6379> SET lockKey uniqueValue EX 3 NX
OK

lockKey:加锁的锁名;
uniqueValue:能够唯一标示锁的随机字符串;
NX:只有当 lockKey 对应的 key 值不存在的时候才能 SET 成功;
EX:过期时间设置(秒为单位)EX 3 标示这个锁有一个 3 秒的自动过期时间。与 EX 对应的是 PX(毫秒为单位),这两个都是过期时间设置。

如何实现锁的优雅续期?

对于 Java 开发的小伙伴来说,已经有了现成的解决方案:Redisson

什么是可重入锁?

可重入锁指的是在一个线程中可以多次获取同一把锁,比如一个线程在执行一个带锁的方法,该方法中又调用了另一个需要相同锁的方法,则该线程可以直接执行调用的方法即可重入 ,而无需重新获得锁。像 Java 中的 synchronized 和 ReentrantLock 都属于可重入锁。
不可重入的分布式锁基本可以满足绝大部分业务场景了,一些特殊的场景可能会需要使用可重入的分布式锁。

实际项目中,我们不需要自己手动实现,推荐使用我们上面提到的 Redisson ,其内置了多种类型的锁比如可重入锁(Reentrant Lock)


http://www.ppmy.cn/news/103411.html

相关文章

渗透测试辅助工具箱

0x01 说明 渗透测试辅助工具箱 运行条件:jdk8 双击即可运行 反弹shell,命令生成器,自动编码,输入对应IP端口即可,实现一劳永逸,集成一些小工具,辅助渗透,提高效率 输入框说明 L…

Openai+Deeplearning.AI: ChatGPT Prompt Engineering(五)

想和大家分享一下最近学习的Deeplearning.AI和openai联合打造ChatGPT Prompt Engineering在线课程.以下是我写的关于该课程的前四篇博客: ChatGPT Prompt Engineering(一)ChatGPT Prompt Engineering(二)ChatGPT Prompt Engineering(三)ChatGPT Prompt Engineering…

Linux - Java 8 入门安装与重装教程集锦

一、入门初始安装 1. 具体安装教程 1. linux 系统中如何安装java环境(通过tar.gz文件) 安装包下载链接 Java 的 tar.gz 安装包下载链接传送门 Linux 系统的 Java 环境变量配置教程 1. linux查看java版本,以及配置java home 2. Linux环…

OPC UA客户端访问 OPC DA服务器

目标 用OPC UA客户端(如UaExpert)读取OPC DA服务器上的点。 原理 OPC DA是基于COM/DCOM的,传统OPC DA客户端访问非本机OPC DA服务时需要配置DCOM。OPC UA客户端无法直接访问 OPC DA服务,需要将OPC DA服务映射为OPC UA服务&#x…

从零搭建微服务-认证中心(四)

写在最前 如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。 源码地址:https://gitee.com/csps/mingyue 文档地址:https://gitee.com/csps/mingyue/wikis 搭建前端框架 感谢开源项目【vue-next-adm…

《基础知识》

一、前端 (1)Vue动态设置Style属性:Vue动态设置Style属性_vue :style_花归去的博客-CSDN博客 (2)vue click.native和click.stop和click.self:vue click.native和click.stop和click.self_歪歪100的博客-CS…

云计算与云安全——应用安全

文章目录 问题1——通过模拟恶意攻击者的攻击手法来检测安全漏洞的具体工作方式?请对其做详细说明 问题2——先对web应用进行端口扫描,获取应用所涉及的相关端口和端口上面的网络服务,然后在漏洞库里面进行匹配的工作方式是什么&#xff1f…

SpringBoot配置文件的注入和读取

目录 1. 配置文件的作用 2. 两种配置文件的格式: 2.1 properties 基本语法: 2.1.1 写入 2.1.2 读取 执行原理 2.1.3 缺点分析 2.2 yml 基本语法: 2.2.1 写入(非对象) 2.2.3 配置对象 2.2.4 配置集合 多个配…