请阐述在 Redis 中实现分布式锁的具体方案与要点。
考察说明
考查候选人对 Redis 实现分布式锁的核心机制、可靠性和风险的理解。
回答思路
- 【回答框架 1】分布式锁用于在分布式系统中协调多节点对共享资源的互斥访问。Redis 实现分布式锁的核心是 SET 命令的 NX 和 EX 参数,结合 Lua 脚本保证原子性。
- 【回答框架 2】典型实现:加锁时使用 SET lock_key unique_value NX EX 设置过期时间,避免死锁;解锁时通过 Lua 脚本比对唯一标识并删除,防止误删其他线程的锁。
- 【回答框架 3】可靠性考量:单机 Redis 存在主从切换导致锁丢失风险,Redlock 算法在多个独立节点上获取锁以提升安全性,但 Redlock 仍存在争议,需结合业务场景权衡。
- 【回答框架 4】锁的粒度、持有时间和业务操作时长需要匹配,合理设置过期时间并考虑续期机制,避免业务未完成锁已过期。
- 【关键点 1】SET key value NX EX 实现加锁,保证原子性。
- 【关键点 2】使用唯一标识(如 UUID)防止误删锁。
- 【关键点 3】释放锁必须用 Lua 脚本原子操作。
- 【关键点 4】Redlock 算法提高可用性但非绝对可靠。
- 【关键点 5】锁过期时间需大于业务处理时间,必要时自动续期。
- 【易错点 1】直接使用 DEL 释放锁可能删除他人持有的锁,必须校验唯一标识。
- 【易错点 2】单机 Redis 主从切换时可能锁丢失,Redis 集群需考虑 Redlock 或替代方案。