分布式锁有哪些实现思路?
查看完整题解
参考回答
直接回答
可比较七种思路。单实例 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 题
这道题,你掌握得怎么样?
掌握程度由你主动标记,阅读和收藏不会自动改变状态。