Redis中的分布式锁 - 详解

news/2025/12/2 11:44:44/文章来源:https://www.cnblogs.com/ljbguanli/p/19296832

Redis中的分布式锁 - 详解

目录

基于Redis的SetNx命令

实现:

为什么要判断锁是否是本线程加上的(为什么要引入校验id)?

为什么要使用用Lua脚本来完成(为什么要引入Lua)?

问题

基于Redisson

Redisson可重入锁原理

1.获取锁的逻辑

2.释放锁的逻辑

超时续约机制(看门狗机制)

Redisson分布式锁的数据未同步导致线程安全

主从问题:

解决方案:

Redlock 算法的具体过程


基于Redis的SetNx命令

SetNX 如果key已存在,则结果返回0。如果key不存在,则结果返回1。

实现:

1.加锁set unique_key 机器码+线程ID NX EX TTLunique_key一般是业务唯一标识)

  • 加锁成功:执行命令结果返回1
  • 加锁失败:执行命令结果返回0
  • 能搭建互斥且设置了TTL,行通过TTL到期删除key,自动释放锁,防止死锁情况

2.释放锁执行 del 删除 key 的命令

a.先 Get key 拿到 value 判断当前锁是否是本机器本线程加上的

  • 若是,可以正常删除锁
  • 若不是,则不必须处理

为什么要判断锁是否是本线程加上的(为什么要引入校验id)?

是为了防止锁误删的情况

举例: 线程1业务阻塞,锁的TTL到期,Redis key 自动删除,则锁释放,然后线程2获取到了锁。在线程2正常执行时,线程1恢复运行,如果线程1不判断当前锁是否是自己加上的,直接把锁删除了,就出现问题——线程1误删了线程2的锁。

为什么要使用用Lua脚本来完成(为什么要引入Lua)?

因为判断是否是当前线程的锁 + 删除key释放锁 两个处理,这两个操作如果不是原子的就会出现如图片上的问题,使用Lua脚本,使得这两个操作变为原子性的

问题

  • 由于业务执行耗时太长,TTL到期,锁被迫释放,存在多个线程并行的情况
  • SetNX 线程不可重入

  • TTL不好设置,业务到底要执行多长时间,我们不太确定(这个可以引入看门狗解决)

基于Redisson

Redisson 是市面上成熟的分布式锁组件,相对于用 SetNx 命令实现的分布式锁更加强大和完善。

Redisson可重入锁原理

即一个线程可以多次获取锁。利用Hash结构,记录获取锁的线程获取锁的次数

1.获取锁的逻辑

a.判断 key(unique_value一般是业务唯一标识) 是否存在,即判断是否有线程持有锁

  • 假如key不存在,代表没有线程持有锁,则获取锁,即设置一个Hash结构的 (field,value),field是机器码+线程ID,value是 次数 1
  • 如果key存在,代表有线程持有锁,此时判断持有锁的线程是否是当前线程,如果是当前线程,则重入次数+1。
2.释放锁的逻辑

a.重入次数-1,假设重入次数为0,删除key,释放锁。

超时续约机制(看门狗机制)

为了解决TTL不好设置,如果分布式锁的key设置了TTL,又因为业务阻塞原因,导致当前线程的业务未完成,TTL到期了,导致被迫释放锁,此时就会有其他线程抢占锁,导致有线程并行执行,违背了加分布式锁的初心。

当 Redisson 获取锁没有指定锁的TTL时,默认会使用超时续约机制(看门狗WatchDog)机制。

续期规则

  • 默认 TTL 为30 秒,后台线程(定时任务)每隔10 秒检查业务是否结束。
  • 若未达成 → 通过 Lua 脚本重置锁 TTL(续期至 30 秒),保证锁不被释放,等到业务执行完。

Redisson分布式锁的数据未同步导致线程安全

主从问题

  • 主节点宕机时,若从节点未同步 锁 数据 (就是主节点还没来得及把数据给同步到从节点,就挂了,导致加锁失败)→ 新主节点可能允许其他线程重复加锁 →锁失效

解决方案:

  • 此时要求部署多个 Redis 主节点,多主多从架构,向多个主节点都去获取锁
  • MultiLock 联锁方案:要求 所有主节点加锁成功,否则立即失败并释放已获取的锁(要么全部成功要么全部失败)
  • RedLock 红锁方案:要求 半数主节点以上(如 3/5)加锁成功,否则立即失败并释放已获取的锁。
Redlock 算法的具体过程

引⼊⼀组 Redis 节点. 其中每⼀组 Redis 节点都包含⼀个主节点和若⼲从节点. 并且组和组之间存 储的素材都是⼀致的, 相互之间是 "备份" 关系(⽽并⾮是数据集合的⼀部分, 这点有别于 Redis cluster). 加锁的时候, 按照⼀定的顺序, 写多个 master 节点. 在写锁的时候需要设定操作的 "超时时间". ⽐如 50ms. 即假如 setnx 处理超过了 50ms 还没有成功, 就视为加锁失败.

同理, 释放锁的时候, 也需要把所有节点都进⾏解锁操作. (即使是之前超时的节点, 也要尝试解锁, 尽量保 证逻辑严密)

"少数服从多数的"就是Redlock 算法的核⼼就是, 加锁操作不能只写给⼀个 Redis 节点, ⽽要写个多个!! 分布式系统中任何⼀个节点都是不可靠的. 最终的加锁成功结论

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

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

相关文章

2025年知名的防腐轻钢龙骨/抗震轻钢龙骨厂家推荐及选购指南

2025年知名的防腐轻钢龙骨/抗震轻钢龙骨厂家推荐及选购指南行业背景与市场趋势随着建筑行业对绿色环保、施工效率及抗震性能要求的不断提高,轻钢龙骨作为现代建筑装饰的重要材料,正迎来前所未有的发展机遇。2024-202…

1. C 程序的编译过程

C程序的编译过程主要分为四个阶段:预处理(Preprocessing)、编译(Compilation)、汇编(Assembly)和链接(Linking)。下面详细介绍每个阶段: 1. 预处理(Preprocessing)作用:预处理阶段主要处理源文件中以 # 开…

2025年离心浇铸机设备工厂推荐榜单:离心浇铸管道设/顶管生产设备/离心浇铸管道制造厂商精选

在复合材料高端制造领域,离心浇铸与连续缠绕技术是生产高性能玻璃钢管道、储罐等产品的核心工艺。这类设备的技术水平直接决定了最终制品的机械强度、耐腐蚀性、尺寸精度与生产效率。对于计划新建或升级产线的企业而言…

毕业论文神器!9款免费AI写论文工具实测,轻松过查重!

作者在校园论坛看到学弟用网上AI工具写论文查重率高的求助帖,感同身受。想起自己毕业时和舍友实测筛选出不少好用的AI论文生成工具,现总结9款免费工具分享,包括AI论文智作、QuillBot、瑞达写作等。详细介绍各工具简…

2025年十大靠谱数字文化展馆建设公司推荐,国创展览的服务有

在文化数字化浪潮下,数字文化展馆已成为城市文化名片、企业品牌窗口与历史记忆载体。面对市场上良莠不齐的展馆建设服务商,企业如何避开资质造假交付延期维护缺失等坑?以下结合展馆类型与核心需求,推荐2025年十大靠…

2025年知名的重卡充电桩/电动汽车充电桩厂家最新权威推荐排行榜

2025年知名的重卡充电桩/电动汽车充电桩厂家权威推荐排行榜 行业背景与市场趋势 随着全球能源结构的转型和环保政策的持续推进,电动汽车(EV)及重型卡车(重卡)电动化已成为不可逆转的趋势。2025年,全球充电桩市…

薄荷输入法配置

右键输入法,选择“用户文件夹”。 启用微软双拼 打开 default.yaml,把微软双拼取消注释,其他不用的可以注释掉,提高部署速度。 右键输入法,部署。可通过 Ctrl + ` 切换方案。 更改候选词个数、最大输入长度 创建…

2025 年 12 月 GEO 优化口碑推荐榜单

在 AI 技术重塑营销生态的当下,GEO(生成式引擎优化)成为企业抢占 AI 搜索流量、实现数字化增长的核心抓手。本次 2025 年 12 月全国 GEO 推广口碑榜单,聚焦浙江优质 GEO 服务企业,综合考量核心技术实力、服务覆盖…

2025杭州出国留学中介机构有哪些公司

2025杭州出国留学中介机构有哪些公司一、杭州留学中介选择指南:五大高频问题解析作为拥有十年经验的国际教育规划师,我经常被杭州的家长和学生问及如何选择留学中介。在2025年10月23日的今天,留学市场信息繁杂,许多…

go练习例子

1.wgpackage main import ("fmt""time""sync" )var wg sync.WaitGroupfunc printNumbers() {defer wg.Done()for i := 1; i <= 5; i++ {fmt.Println(i)time.Sleep(time.Second)} }fu…

2025各大留学机构对比分析

2025各大留学机构对比分析一、2025年留学中介怎么选?这五个问题帮你理清思路作为在留学行业深耕十年的国际教育规划师,我每天都会遇到大量学生和家长咨询相同的问题。2025年申请季来临,大家最纠结的莫过于:众多留学…

2025年比较好的高分子材料流延机/精密流延机用户口碑最好的厂家榜

2025年高分子材料流延机/精密流延机用户口碑厂家排行榜行业背景与市场趋势随着新材料产业的快速发展,高分子材料在新能源、电子封装、医疗器械等领域的应用日益广泛。作为高分子材料生产的关键设备,流延机(尤其是精…

2025成都出国留学中介机构排名榜

2025成都出国留学中介机构排名榜一、成都留学中介怎么选?这五个问题帮你理清思路在准备出国留学的过程中,许多成都学生和家长都会面临同一个问题:到底该选择哪家中介机构?随着2025年留学申请季的临近,大家对于中介…

2025比较出名的留学机构排名榜

2025比较出名的留学机构排名榜一、2025年留学中介怎么选?五大疑问帮你理清思路作为从事15年国际教育规划师的笔者,经常被学生和家长问及如何选择留学中介。在2025年10月24日的今天,留学市场愈发多元,机构数量众多,…

2025年12月电线厂家权威推荐榜:铜芯/无氧铜/铝芯/BVR/光伏/工业设备/家装/消防电线,精选耐用导电先锋品牌

2025年12月电线厂家权威推荐榜:铜芯/无氧铜/铝芯/BVR/光伏/工业设备/家装/消防电线,精选耐用导电先锋品牌在现代工业制造、能源传输与建筑装饰领域,电线电缆作为电力与信号的“血管”,其性能的可靠性与稳定性直接关…

2025年花灯制作厂家采购指南:前五名推荐,花灯灯展/马年花灯/国潮花灯/智能互动花灯/互动花灯/华景花灯品牌选哪家

随着文旅融合的深入与夜间经济的蓬勃发展,花灯作为承载传统文化与现代科技的重要载体,其市场需求持续增长。对于景区、文旅集团、商业综合体等采购方而言,选择一家实力雄厚、经验丰富且能提供持续价值的花灯制作厂家…

2025年自动轴承压装机实力厂家权威推荐榜单:增压压床‌/轴承压装机‌/电机压装机‌源头厂家精选

当一台自动轴承压装机能将压装力偏差精确控制在 1% 以内,并在 0.5秒 内完成一次精准装配,其背后是伺服驱动、闭环控制与机器视觉等核心技术的深度融合。 自动轴承压装机作为实现轴承与轴、孔之间过盈配合的核心装备,…

2025年郑州二手房改造哪家口碑好?年度排名推荐翻新装修公司

装修市场鱼龙混杂,二手房改造更是因老房问题多、坑点难避让业主头疼——水电老化、布局不合理、材料以次充好、增项套路深等痛点频发。为帮业主精准锁定可靠服务商,我们从施工经验(拆改技术、老房适配能力)、材料透…

2025年十大裁断机制造商哪家好排行榜,精选裁断机定制厂家推

为帮助企业高效锁定适配自身需求的裁断机合作伙伴,避免采购走弯路,我们从技术落地能力(如结构稳定性、定制适配性)、产品性能表现(含裁切精度、耐用性)、全周期服务质量(覆盖前期选型到售后维护)及真实客户口碑…

golang 常用方法或模块

雪花算法生成ID 工具库 github.com/bwmarrin/snowflake package snowflakeimport ("github.com/bwmarrin/snowflake""time" )var node *snowflake.Node// Init 初始化节点,能够使用69年 // startT…