Java 后端面试题库 / 全部题解免费阅读理解原理,有条理地回答

分布式锁有哪些实现思路?

先说出你的答案

定义边界、关键机制、一个反例;P8题再补容量、失败与验证。

查看完整题解

参考回答

直接回答

可比较七种思路。单实例 SET NX PX 加所有者校验、带续期的租约、Redisson 可重入锁、多独立节点 Redlock、数据库行锁、数据库唯一约束占位、协调服务的临时节点。要按故障保证选。

讲清原理

Redis 租约过期后旧持有者仍可能继续执行。要保护外部资源,常需要每次获得锁都生成更大的令牌,资源记住已接受的最大值并拒绝更旧的请求。主从切换和跨节点方案也各有时钟与失败假设。

锁过期后旧拥有者与新拥有者可能同时运行
锁过期后旧拥有者与新拥有者可能同时运行

例子与易错点

单实例租约适合可接受少量重复的缓存重建。资金或唯一业务写入应由权威存储的事务、约束或受保护资源承担正确性。

释放前核对锁值。错误的所有者删不掉锁。

SET q52:lock token-a NX PX 30000
EVAL "if redis.call('GET',KEYS[1])==ARGV[1] then return redis.call('DEL',KEYS[1]) end return 0" 1 q52:lock token-b
EVAL "if redis.call('GET',KEYS[1])==ARGV[1] then return redis.call('DEL',KEYS[1]) end return 0" 1 q52:lock token-a

相关题 · 第 55 题、第 69 题

这道题,你掌握得怎么样?

掌握程度由你主动标记,阅读和收藏不会自动改变状态。