加锁流程(5 节点示例)
加锁流程(5 节点示例)
# 对 5 个独立实例逐一加锁,成功数 >= 3 且总耗时 < 锁 TTL 才算成功
for h in 10.0.0.1 10.0.0.2 10.0.0.3 10.0.0.4 10.0.0.5; do
redis-cli -h $h -p 6379 SET lock:job 6f1d2c4e NX PX 10000
done
# 释放:对所有实例执行安全释放 Lua(只删自己的 token)- 作者 antirez 的出发点:单实例锁在实例故障时不可用,多实例多数派提高可用性
- Kleppmann 的质疑:依赖各节点时钟、GC/网络暂停可让锁在实际过期后仍被使用,强一致场景应改用共识系统
- 折中结论:把 Redis 锁当「高效互斥」而非「强一致锁」;下游用 fencing token/唯一索引拒旧写
别把 N 个 Redlock 节点放在同一台宿主/同一交换机下:一挂全挂,多节点只是仪式感。