快速搞懂红锁(redLock)和联锁(multiLock)

【HBZ分享】Redis之红锁Redlock---主从在同步锁信息时恰好宕机导致没同步到从库锁的信息,从库顶替上之后会有两个线程加同一把锁问题 此时在还没来得及持久化C节点就崩溃了,导致没有持久化,然后C节点重启,此时客户端2来了锁住了C,D,E, 获取锁成功,客户端2没有在A,B上加锁成功,并且客户端1也没有释放锁,按理说C应该有客户端1的锁,但由于没同步,误认为此时锁可以获取,就导致了C,D,E节点通过,获取锁成功,但正常客户端2不应该获取到锁。解决:建议延迟重启,一个节点崩溃后,先不立即重启,而是等待一段时间再重启,这段时间应该大于锁的有消息,应保证当节点重启的时候,所有参与锁都会过期,再重启后就不会对现有锁造成影响。 阅读详情

Redis 的主从异步复制机制确实给分布式锁带来了一个经典的挑战:在主节点获取锁成功后,如果锁数据还未同步到从节点时主节点发生故障,从节点晋升后可能丢失锁信息,导致多个客户端同时持有锁,破坏互斥性

。为了应对这一问题,Redisson 提供了 RedLock(红锁)和 MultiLock(联锁)两种机制。它们在设计目标和适用场景上有所不同。

下面是一个表格,帮助你快速了解两者的核心区别:

特性

RedLock (红锁)

MultiLock (联锁)

​​设计目标​​

​​解决主从异步复制导致的锁丢失问题​​,提供更高的一致性保证

​​同时锁定多个资源​​,保证对多个资源的操作具备原子性(要么全锁,要么全不锁)

​​底层节点要求​​

需要多个(推荐至少5个)​​完全独立的 Redis 主节点​​,且无副本关系

所有锁通常在​​同一个 Redis 集群或实例​​内

​​成功条件​​

必须在超过半数的独立节点上成功获取锁 (N/2 + 1)

​​所有​​指定的锁都必须成功获取

​​容错性​​

允许部分节点故障(最多 (N-1)/2 个)

任一锁对应的 Redis 节点故障则整体获取失败

​​典型应用场景​​

对锁的​​可靠性要求极高​​的场景,如金融交易

需要​​原子性操作多个资源​​的场景,如分布式事务中同时锁定订单、库存和优惠券

​​性能开销​​

较高(需与多个独立节点通信并等待多数响应)

相对较低(但锁越多,耗时越长)

​​是否要求时钟同步​​

是,节点间时钟漂移可能影响锁有效性

否

🔧 工作原理详解

​​RedLock (红锁)​​

RedLock 算法通过​​在多个独立的 Redis 主节点上获取锁​​,并要求​​多数节点(N/2 + 1)成功​​来解决主从复制延迟问题

。其核心流程如下:

  1. 1.

    ​​获取当前时间​​:记录开始加锁的时间点 T1。

  2. 2.

    ​​依次向所有节点加锁​​:使用相同的键和随机值,向每个独立节点发送加锁命令(如 SET key random_value NX PX),并设置一个较短的超时时间

    。
  3. 3.

    ​​计算总耗时​​:获取锁完成后,计算总耗时 T2 = 当前时间 - T1。

  4. 4.

    ​​判断成功条件​​:必须同时满足:

    • •

      成功获取锁的节点数 ≥ (N/2 + 1)

      。
    • •

      总耗时 T2 ​​小于​​ 锁的有效时间 (TTL)

      。这是为了确保锁在获取成功后仍有合理的有效时间。
  5. 5.

    ​​解锁​​:向所有节点发送解锁请求(通常通过 Lua 脚本确保仅当值匹配时才删除)

    。
​​MultiLock (联锁)​​

MultiLock 的目标是​​将多个 RLock 对象关联为一个逻辑上的“大锁”​​,确保这些资源上的操作具备原子性

。其核心流程如下:

  1. 1.

    ​​创建多个锁对象​​:为每个需要锁定的资源创建一个 RLock对象。

  2. 2.

    ​​组合成联锁​​:将这些 RLock对象组合成一个 RedissonMultiLock。

  3. 3.

    ​​尝试加锁​​:按顺序尝试获取所有锁

    。
    • •

      若​​所有锁​​都成功获取,则联锁获取成功。

    • •

      若​​任何一个锁获取失败​​(如超时或异常),则​​立即释放所有已经获取的锁​​,然后根据策略(如等待重试)进行后续操作

      。
  4. 4.

    ​​执行业务逻辑​​。

  5. 5.

    ​​解锁​​:释放联锁时,会按顺序释放所有组成该联锁的单个锁

    。

⚠️ 注意事项与争议

  • •

    ​​RedLock 的争议​​:RedLock 算法在分布式系统领域存在一些争议。其主要焦点在于它对​​系统时钟的强依赖​​。若节点间发生严重的时钟漂移,可能导致锁异常失效

    。Martin Kleppmann 曾对此提出质疑,而 Redis 作者 Antirez 进行了反驳。此外,在极端情况下(如客户端发生长时间的 GC 停顿),也可能导致锁的安全性被破坏。​​因此,是否采用 RedLock 需仔细评估你的业务场景对一致性的容忍度、基础设施状况(节点独立性和时钟同步)和运维成本。​​
  • •

    ​​MultiLock 的局限​​:MultiLock 本身​​并不能直接解决主从一致性问题​​

    。如果其管理的所有 RLock都在同一个 Redis 主从架构中,那么该主节点宕机同样会导致锁丢失风险。它更侧重于保证多个资源锁定的原子性。
  • •

    ​​性能考量​​:RedLock 由于需要与多个独立节点通信,其延迟和性能开销通常高于单节点锁或 MultiLock

    。MultiLock 的性能则取决于需要同时获取的锁的数量和网络状况。
  • •

    ​​错误处理​​:对于 RedLock,如果加锁失败(未获多数同意或超时),必须​​清理所有节点上可能已设置的锁​​,以避免留下垃圾数据

    。

🎯 如何选择?

  • •

    ​​追求更高一致性,能容忍一定性能损耗​​:如果你的业务场景对分布式锁的​​可靠性要求极高​​(例如金融交易关键步骤),且你能够部署和维护多个​​独立的 Redis 主节点​​,并确保节点间时钟同步,可以考虑使用 ​​RedLock​​

    。
  • •

    ​​需要原子性操作多个资源​​:如果你的业务逻辑需要​​同时锁定多个关联资源​​(例如下单时同时锁订单、库存和优惠券),以确保这些操作要么全部成功要么全部回滚,那么应该使用 ​​MultiLock​​

    。
  • •

    ​​注意​​:在一些讨论和实践中(例如 Redisson 的某些实现),RedLock 在底层是通过继承或封装 MultiLock 来实现的,但其成功判断条件(多数派)和部署要求(独立节点)是不同的

    。也有资料指出 Redisson 中的 RedissonRedLock已被标记为弃用(deprecated),使用时需查阅当前版本的官方文档。

💎 总结

Redisson 的 RedLock 和 MultiLock 是应对不同分布式锁需求的工具。

  • •

    ​​RedLock​​ 旨在通过​​多数派机制​​和​​独立节点部署​​来克服​​主从复制延迟​​导致锁失效的问题,提供更高的一致性保证,但代价是复杂性和性能开销

    。
  • •

    ​​MultiLock​​ 则专注于解决​​多个资源原子性加锁​​的问题,确保业务操作中涉及的所有资源都能被同时锁定或释放,但它本身不直接提供抵御主从故障的能力

    。

选择时,请务必根据你的​​业务需求​​、​​基础设施状况​​和对​​一致性级别的要求​​进行审慎评估。对于绝大多数应用场景,使用单节点锁并保证业务幂等性可能是更简单实用的选择;若确有强一致性需求,或许值得探索 ZooKeeper 或 etcd 等 CP 系统的分布式锁方案。

7.【Redisson源码】RedLock红锁加锁流程 红锁其实也并不能解决根本问题,只是降低问题发生的概率。完全相互独立的redis,每一台至少也要保证高可用,还是会有主从节点。既然有主从节点,在持续的高并发下,master还是可能会down机,从节点可能还没来得及同步锁的数据。很有可能多个主节点也发生这样的情况,那么问题还是回到一开始的问题,红锁只是降低了发生的概率。其实,在实际场景中,红锁是很少使用的。这是因为使用了红锁后会影响高并发环境下的性能,使得程序的体验更差。所以,在实际场景中,我们一般都是要保证Redis集群的可靠性。 阅读详情

相关推荐

Redis——RedLock、Zookeeper及数据库实现分布式锁

在分布式系统中,实现分布式锁是确保数据一致性和防止并发问题的重要手段。

IT深耕十余载,大道之简 633

Redlock(redis分布式锁)原理分析

关于分布式锁,一般有三种选择, 1、redis 2、zk 3、DB锁(悲观锁、乐观锁) 其中用的最多的应该是redis。 redis常用的方式有单节点、主从模式、哨兵模式、集群模式。 单节点在生产环境基本上不会使用,因为不能达到高可用,且连RDB或AOF备份都只能放在master上,所以基本上不会使用。 另外几种模式都无法避免两个问题: 1、异步数据丢失。 2、脑裂问题。 所以redis官方针对这种情况提出了红锁(Redlock)的概念。 Redlock:全名叫做 Redis.

lisheng19870305的专栏 2万+

Redisson分布式锁原理深度解析与生产实践指南

在分布式系统中,并发控制是保障数据一致性的核心技术挑战。其核心原理是通过协调多个独立进程对共享资源的访问,确保同一时刻只有一个执行单元能操作临界资源。这一机制的技术价值在于解决分布式环境下的资源争用问题,如库存超卖、数据重复处理等。实现分布式锁有多种方案,其中基于Redis的方案因其高性能和丰富的数据结构被广泛应用。Redis通过原子操作和Lua脚本保证了锁操作的原子性,而Redisson作为Redis的Java客户端,在其基础上封装了生产级可用的分布式锁实现。Redisson锁的核心机制包括:使用Hash

weixin_34025151的博客 422

【Redis】之 RedLock 分布式锁

在多线程环境中,为了控制线程对资源并发访问和竞争,我们经常需要用到锁来进行控制。常用的锁例如 Java 自带的等。但这些锁只能用于单机系统中,如果涉及到多机器、多节点的分布式环境的资源竞争,就需要使用分布式锁了。

王廷云的博客 1万+

Redisson分布式锁原理、实战与避坑指南:从秒杀到缓存击穿的完整解决方案

在分布式系统和微服务架构中,并发控制是保障数据一致性的核心技术挑战。其核心原理在于通过一个全局可见的协调服务(如Redis),实现跨进程、跨服务的互斥访问,从而解决多节点同时操作共享资源引发的数据竞争问题。这项技术的核心价值在于为分布式环境提供了类似单机线程锁的同步能力,是构建高可靠、强一致性系统的基石。其典型应用场景广泛,包括防止电商秒杀中的库存超卖、确保分布式任务调度的幂等性、以及应对缓存击穿时对数据库的并发查询保护。本文以Java生态中广泛使用的Redisson客户端为例,深入剖析其基于Redis H

Eric.Net的专栏 363

Redisson分布式锁实战:从自研锁到看门狗机制,避开这些坑

在分布式系统设计中,并发控制是保证数据一致性的关键难题,分布式锁作为最常用的互斥手段,其实现方式直接影响系统的正确性与稳定性。从Redis的SET NX EX到ZooKeeper临时顺序节点,不同方案在性能、一致性与运维成本上各有取舍。自研锁虽简单,却面临过期时间难定、主从切换锁丢失、续期机制复杂等挑战。Redisson作为成熟的Redis客户端,通过看门狗自动续期、Lua脚本原子操作及可重入锁等机制,有效规避了自研锁的常见缺陷。在实际工程中,合理配置Codec序列化、锁等待时间与锁粒度,并结合幂等设计,才

weixin_34306593的博客 184

分布式锁:红锁redLock和联锁multiLock源码分析

环境 Java11 前言 一开始只是想研究红锁源码,但是发现红锁源码是基于联锁源码的, 所以联锁的情况一起分析了下; Redis获取分布式锁,其实就是向N个Redis实例中使用SETNX来对该resource设置键值。 为了方便分析代码,假设集群里三个Redis实例; 起始调用代码: long leaseTime = 3L; lock.lock(leaseTime, TimeUnit.SECONDS); RedissonRedLock redLock = new RedissonRedLock(lock);

山鬼谣的专栏 6112

自动驾驶必备:5分钟搞懂gPTP如何实现μs级时间同步(附开源代码)

本文深入解析了gPTP协议在自动驾驶系统中实现微秒级时间同步的核心机制与工程实践。针对多传感器融合与跨域协同的严苛需求,文章拆解了gPTP的频率同步、对等延迟测量与时间偏移校正三步流程,并提供了基于linuxptp和AVnu gPTP两大开源代码库的实战配置指南与性能评估方法,助力开发者构建高精度、高可靠的车载时间同步网络。

weixin_29211309的博客 167

Redisson MultiLock联锁原理与实战:分布式环境下多资源原子加锁指南

分布式锁是解决分布式系统并发控制的核心技术,其原理是通过一个外部存储系统(如Redis)实现跨进程、跨服务的互斥访问。在分布式架构中,当业务操作需要同时锁定多个独立资源(如用户账户和积分)时,传统的单锁无法满足原子性要求,容易导致数据不一致。Redisson MultiLock(联锁)技术应运而生,它通过Lua脚本的原子执行,实现了“全有或全无”的加锁语义,确保所有子锁要么全部获取成功,要么全部失败,从而保障了复杂事务的完整性。该技术广泛应用于电商交易、金融转账等需要强一致性的场景,是构建可靠分布式系统的关

weixin_30861459的博客 464

气象干旱触发水文(农业)干旱的概率及其触发阈值的动态变化-贝叶斯copula模型

本文通过建立不同类型干旱传播过程的触发阈值模型,解析了在不同等级气象干旱胁迫下诱发次一级干旱类型的触发阈值。通过贝叶斯概率模型,我们推导了气象干旱与水文干旱、农业干旱、地下水干旱之间的条件概率关系,进一步明确了气象干旱引发水文干旱、农业干旱和地下水干旱的概率及其触发阈值。该模型有效揭示了气象干旱对各级干旱类型的传播机制及其动态变化,为干旱预警系统的建立和水资源管理提供了理论依据和技术支持。

frankgis的博客 2502

Python+gensim【中文LDA】简洁模型

文章目录完整代码过程详解words_lsdictionarydictionary.doc2bow函数corpuslda 完整代码 from gensim import corpora, models import jieba.posseg as jp # 待分析文本集 text1 = '美国教练坦言,没输给中国女排,是输给了郎平' text2 = '中国女排世界排名第一?真实水平如何,听听巴西和美...

ArYe 2万+

架构设计之Redisson分布式锁-组合锁联锁MultiLock(六)

Redisson MultiLock是一种分布式组合锁机制,允许原子性地锁定多个独立资源。本文深入解析了其核心原理、源码实现及最佳实践。主要内容包括: 核心原理:MultiLock遵循"全成功或全回滚"原则,确保所有子锁加锁成功才算整体成功,否则自动释放已获锁。支持跨Redis实例锁定,统一管理锁生命周期。 技术实现: 顺序加锁与逆序解锁机制 独立Watchdog为每个子锁续期 失败自动回滚保证原子性 支持异步/响应式编程模型 典型场景: 电商下单(同时锁定账户、库存、优惠券) 转账业务

油墨香^-^的博客 163

LLM and Embedding区别

LLM(大语言模型)和 Embedding(嵌入)是自然语言处理(NLP)中的两个核心概念,它们的核心区别在于。Embedding 计算向量。

u010674101的专栏 1873

分布式锁-redission锁的MutiLock原理

分布式锁-redission锁的MutiLock原理

m0_61787196的博客 762

Python爬虫实战:基于Scrapy和Playwright的深交所数据采集

本文将详细介绍如何使用Python最新技术栈(Scrapy框架结合Playwright浏览器自动化)爬取深圳证券交易所(www.szse.cn)的公开数据。文章包含完整项目搭建、反爬策略应对、数据解析存储等全流程实现,并附详细代码示例和性能优化建议。python复制下载# 上市公司基本信息# 财务数据revenue = scrapy.Field() # 营业收入net_profit = scrapy.Field() # 净利润eps = scrapy.Field() # 每股收益。

2201_76125261的博客 949

Quartus II编译时出现Error (119013): Current license file does not support the EP4CE6E22C6 device

Quartus II编译时出现Error (119013): Current license file does not support the EP4CE6E22C6 device, Quartus的安装过程不同于ISE/vivado的安装。“Current license file does not support”这种情况多出现在高版本的quartus中综合很久以前的代码,使用很早型号的FPGA或是CPLD。对于这种情况,就得在官网或是其他网站上下载包含所需Device的库文件。

夜半少年的博客 1万+

Redisson分布式锁实战:原理、避坑与性能优化

分布式锁是解决多节点并发控制的核心技术,通过协调不同进程对共享资源的访问,确保数据一致性。其实现原理通常基于Redis、Zookeeper等中间件,其中Redis因高性能和丰富数据结构成为首选。Redisson作为Redis的Java客户端,封装了完善的分布式锁机制,支持可重入锁、公平锁等特性,并内置看门狗自动续期功能,有效避免死锁问题。在电商秒杀、库存扣减等高并发场景中,合理使用Redisson分布式锁能显著提升系统稳定性。本文结合实战案例,详解参数配置、锁粒度控制等优化技巧,并分享死锁预防、锁续期异常处

weixin_34320159的博客 628

YOLO26涨点改进 | 全网首发Conv独家改进篇 | CVPR 2025 | 引入GCConv卷积改进YOLO26,含GCC3k2二次创新,能够捕捉更加丰富和复杂的特征信息,助力高效涨点

本文提出了一种基于GCConv模块的YOLO26目标检测模型改进方案。GCConv模块通过多路径结构增强特征学习能力,在训练阶段采用垂直多卷积和水平多路径配置,推理时重参数化为单一3x3卷积,显著提升推理速度而不损失性能。实验表明,该模块在复杂场景和多尺度目标检测任务中表现优异,特别适合资源受限的实时应用场景。文章详细介绍了GCConv的网络结构、核心代码实现、YAML配置文件修改方法,并提供了两种改进方案(GCConv和GCC3k2)的具体配置指导。

Ai缝合怪、助力小伙伴高效发论文 318

分布式锁实战:从Redis到Redisson,解决高并发下的资源互斥访问

在分布式系统中,协调多个进程对共享资源的访问是核心挑战之一。其核心原理是通过一个外部存储系统(如Redis、ZooKeeper)作为仲裁者,实现资源的互斥访问,从而保障数据一致性。这项技术的核心价值在于解决高并发场景下的超卖、重复执行等典型问题,是构建可靠微服务架构的关键组件。应用场景广泛覆盖电商秒杀、优惠券发放、定时任务调度等领域。本文以Redis分布式锁为例,深入剖析其实现演进,并重点介绍生产级解决方案Redisson,它通过看门狗机制实现自动续期,并提供可重入锁、公平锁等高级特性,有效应对网络延迟和客

weixin_30520015的博客 273

推荐系统[一]:超详细知识介绍,一份完整的入门指南,解答推荐系统相关算法流程、衡量指标和应用,以及如何使用jieba分词库进行相似推荐,业界广告推荐技术最新进展

推荐算法其实本质上是一种信息处理逻辑,当获取了用户与内容的信息之后,按照一定的逻辑处理信息后,产生推荐结果。热度排行榜就是最简单的一种推荐方法,它依赖的逻辑就是当一个内容被大多数用户喜欢,那大概率其他用户也会喜欢。但是基于粗放的推荐往往会不够精确,想要挖掘用户个性化的,小众化的兴趣,需要制定复杂的规则运算逻辑,并由机器完成。召回:当用户以及内容量比较大的时候,往往先通过召回策略,将百万量级的内容先缩小到百量级。

丨汀、的博客 7591

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Redisson分布式锁实战指南:从基础到高级应用场景

本文详细介绍了Redisson提供的四种分布式锁类型及其适用场景。可重入锁(RLock)适合简单的互斥访问和锁重入需求;公平锁(FairLock)按FIFO原则分配锁,确保执行顺序;联锁(MultiLock)支持同时锁定多个资源;红锁(RedLock)基于多个Redis节点提供高可用性。文章还分享了秒杀系统的最佳实践方案,包括预减库存和分布式锁的双重防护,并提供了性能与可用性权衡矩阵。通过混合锁模式,开发者可以灵活组合不同类型锁的优势,构建强健的分布式并发控制机制。

larner的博客 1223

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

分布式锁-redission功能介绍

分布式锁-redission功能介绍

m0_61787196的博客 796

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Redisson分布式锁实战:从原理到高并发场景优化

本文深入解析Redisson分布式锁的核心原理与高并发优化策略,涵盖可重入锁、看门狗机制及锁粒度控制等关键技术。通过电商秒杀、库存扣减等实战案例,展示如何利用Redisson官方文档推荐的方案提升系统性能,解决分布式环境下的资源竞争问题。

u5v6w7的博客 929

Redisson操作Redis实战:分布式锁、延迟队列与限流

在分布式系统架构中,多节点共享同一份数据时,如何保证操作的一致性与高性能,是开发者普遍关注的问题。Redis凭借其内存读写速度与丰富的数据结构,成为缓存、锁、消息队列等场景的常用基础设施,而Java开发者在处理分布式协调时,往往需要面对原生命令的原子性、锁续期、序列化等繁琐细节。Redisson作为Java生态中开箱即用的Redis高级客户端,将分布式锁、延迟队列、限流器、缓存等能力封装为本地API风格,大幅降低开发成本。文章从分布式系统的通用需求切入,深入剖析Redisson的watch dog锁续期机制

weixin_33924312的博客 332

Redis分布式锁实现与优化实践

分布式锁是解决分布式系统中数据一致性问题的关键技术,通过互斥机制确保关键操作的原子性。其核心原理是利用Redis的原子操作实现跨JVM的锁管理,需满足互斥性、无死锁、容错性和高性能等要求。在电商秒杀、评价防重等典型高并发场景中,分布式锁能有效防止超卖和重复提交等问题。本文基于Redis的SET扩展参数方案,详细介绍了加锁解锁的原子性实现、锁续期机制以及性能优化策略,为开发者提供了一套经过实战检验的分布式锁最佳实践方案。

weixin_30776545的博客 669

Redisson分布式锁与高级特性实战:从原理到生产环境调优

分布式系统开发中,分布式锁是保障数据一致性的核心技术之一,其核心原理是通过协调多个节点对共享资源的访问,避免并发冲突。在Java生态中,Redisson作为基于Redis的分布式服务工具箱,不仅实现了高效的分布式锁,还通过其独特的“看门狗”机制解决了锁的自动续期问题,有效防止了死锁和任务未完成锁已释放的难题。这一机制显著提升了分布式系统的可靠性与稳定性。在技术价值层面,Redisson将Redis从单纯的数据存储扩展为分布式协调服务,为微服务架构下的限流、缓存、分布式集合等场景提供了开箱即用的解决方案。其高

weixin_30613343的博客 402
上一篇: Redis pub/sub机制
下一篇: 快速搞懂Redis哨兵和分片集群
踩坑小念
博客等级 码龄4年 86粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值