-
我用 Redis 加了分布式锁保护临界区,以为万无一失,结果偶发两个进程同时进了临界区、一个进程还把别人的锁给删了:一次分布式锁实现陷阱的深度复盘
我有段临界区代码用 Redis 加了分布式锁保护:SET lock NX EX 30 抢锁、处理完 DEL 释放,以为万无一失。可线上偶发两个进程同时进入临界区的数据错乱,有时还有一个进程把另一个进程正持有的锁删了。推演时序才看明白这锁有两个致命漏洞:漏洞一,锁 EX 30 过期了但业务还没跑完,锁自动释放、B 抢到、A 和 B 同时在临界区;漏洞二,释放时直接 DEL 没校验是不是自己的锁,A …- 0
- 0
-
一个 Redis 分布式锁的过期时间没扛住业务耗时,锁提前自动释放让两个线程同时进了临界区、还互相误删了对方的锁:一次分布式锁失效的深度复盘
用 Redis 分布式锁保证同一笔账只有一个节点处理,跑了大半年都好好的,直到对账量大、业务跑了 40 秒、超过了锁的 30 秒过期时间——锁中途自动释放,第二个线程进了临界区两线程同时处理,第一个线程干完 del 又删掉了第二个线程的锁,锁彻底形同虚设。本文讲透分布式锁的两大核心难题(过期时间两难、误删),给出唯一标识+Lua 原子校验删除防误删、看门狗自动续期解决过期、生产用 Redisson…- 0
- 0
-
我用 Redis 做分布式锁防止任务被重复处理,结果先是一个实例崩了导致所有任务卡死,后来又出现同一个任务被两个实例同时处理,我对着分布式锁这几个致命实现细节排查了大半天的复盘
一个让我对分布式锁看着简单实则处处是坑彻底敬畏的架构坑,它教会我用 Redis 加把锁这件听起来一行代码搞定的事要真正正确实现需要考虑一连串容易被忽略的细节,漏掉任何一个锁就会在某种场景失效——要么死锁卡死所有人要么形同虚设根本没锁住。多实例下要保证同一时刻只有一个实例处理某任务,我用 Redis 分布式锁逐步踩坑:版本1 SETNX+DEL 没过期时间,持锁实例崩了锁永不释放全卡死(死锁);版本…- 2
- 0
-
我用 Redis 加了分布式锁防并发,结果两个进程还是同时执行了、还互相把对方的锁删了,我对着分布式锁的几个致命细节排查了大半天的复盘
做了个多实例部署的定时任务,用 Redis 加分布式锁确保同一时刻只有一个实例执行,以为加了锁就万事大吉。结果生产诡异:有时两个实例同时跑(锁没锁住)导致数据重复处理,有时一个实例把另一个实例的锁删了。盯着 SETNX 抢锁、DEL 释放的标准代码反复看,排查大半天才发现藏着三个致命细节:SETNX 没设过期(持锁者崩溃就死锁)、锁提前过期(业务跑40秒超过锁30秒过期,A还在执行B就抢到锁同时执…- 0
- 0
-
我用 Redis 加了分布式锁防并发,结果偶尔还是有两个节点同时拿到锁、把临界区并发执行了,我对着这把"形同虚设"的锁排查了大半天的复盘
我用 Redis 的 SETNX 加锁、设过期时间防死锁、用完 DEL 释放,实现了分布式锁防并发,结果临界区偶尔还是被两个节点同时执行、锁形同虚设,还极其偶发难复现。把时序画出来才懂两个致命问题:① 业务执行时间超过了锁的过期时间,锁自动到期释放、另一个节点趁机拿到锁,于是两节点同时持锁;② 释放锁直接 DEL 没校验"是不是自己的锁",A 超时后 B 拿到锁,A 执行完却把…- 0
- 0
-
分布式锁完全指南:从一次"两个人买走同一件库存"看懂 Redis 锁的所有坑
2023 年我负责电商库存扣减,逻辑很朴素:查库存、大于零就减一。Demo 毫无问题,直到一次大促对账发现可怕的事——一个标价 100 件的爆款,系统让 103 个人下单成功了,超卖。问题不在那三行业务,在并发:两个请求同时查到库存 1、同时判断大于零、同时各扣一次。我以为加把锁就行,用 synchronized 本地不超卖了,一上线超卖照旧——服务多实例部署,synchronized 只锁单个 …- 0
- 0
-
分布式锁完全指南:Redis 分布式锁的正确打开方式
一场秒杀活动让我栽了个跟头:商品库存 100 件,扣库存那段我特意加了锁 —— synchronized 把"查库存、判断够不够、扣减"三步整个包住,自觉绝不可能超卖。活动结束运营找来:卖出去 103 件。代码翻了十几遍 synchronized 明明白白包在那里逻辑没错,直到看了一眼部署架构图才一身冷汗:服务部署了 3 台机器 = 3 个独立 JVM 进程,synchroni…- 0
- 0
-
库存卖超了 7 件:一次 Redis 分布式锁踩坑的复盘
秒杀某 SKU 库存 100 却卖出 107,根子是手写的 Redis 分布式锁:加锁与设过期非原子、解锁直接 delete 误删别人的锁、固定过期时间业务超时即失效、主从切换锁直接丢。几天重写分布式锁:SET NX PX、Lua 安全解锁、看门狗续期、Redisson、数据库兜底、锁监控。- 2
- 0
-
Redis 分布式锁踩过的 5 个坑:从 SETNX 到 Redlock 到 fencing token
秒杀超卖 1 件复盘:Redis 主从切换导致锁失效。本文讲透 5 种错误实现 + 正确的 SET NX PX + Lua、Redisson watchdog、Redlock 算法、Martin Kleppmann 的质疑、fencing token 思路,以及 etcd 强一致锁的对比。附完整 Java 代码 + 选型建议。- 0
- 0
Redisson
幸运之星正在降临...
点击领取今天的签到奖励!
恭喜!您今天获得了{{mission.data.mission.credit}}积分
我的优惠劵
-
¥优惠劵使用时效:无法使用使用时效:
之前
使用时效:永久有效优惠劵ID:×
没有优惠劵可用!









