首页/数据/数据库速查/Redlock 算法与争议要点
本包目录(495 条)
MySQL 基础与连接36 条SQL 语法52 条用户与权限21 条备份与恢复56 条主从复制与高可用53 条性能与调优57 条Redis 命令96 条
Redis 运维与场景124 条

Redlock 算法与争议要点

Redlock 在 N 个相互独立的 Redis 主节点上依次用同一 key/token 加锁,多数(N/2+1)成功且总耗时小于 TTL 才算持锁;用于缓解单实例宕机导致锁服务不可用,但强一致场景存在争议。

数据库速查数据更新于 2026-10-12

加锁流程(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 节点放在同一台宿主/同一交换机下:一挂全挂,多节点只是仪式感。

易错点

  • 节点时间漂移大:锁有效期判断失真(各节点时钟要 NTP 同步)
  • 把 Redlock 用于要求强一致的金融扣款:应上共识系统或数据库事务

数据来源与参考

  • Redis 官方文档: Redlock
  • Martin Kleppmann: How to do distributed locking

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌