Redis 的 Red Lock 是什么?你了解吗?

RedLock(红锁)面试结构化回答

是什么

单机Redis+主从的分布式锁有缺陷:客户端在master拿到锁,锁还没同步到slave,master宕机,slave升级新主,锁直接丢失,多个客户端同时获取锁,破坏互斥性。

RedLock是Redis作者提出的多节点分布式锁算法,目的解决主从切换丢锁问题。

关键点:5个完全独立的Redis主节点,不能有主从复制关系,依靠多数派(quorum)机制,不是Raft/Paxos一致性算法。

完整加锁流程(N=5)

  1. 记录加锁开始时间戳T1
  2. 向5个独立Redis节点 并行发起加锁,命令依旧是 SET key 唯一值 NX EX;每个节点请求设置很短超时,防止卡死在故障节点。
  3. 统计成功加锁节点数量,必须大于半数,也就是至少3个节点加锁成功;同时,整个加锁消耗的总时间,必须小于锁过期时间。两个条件同时满足才算拿到锁。
  4. 锁真实有效时间 = 设置的TTL − 加锁耗时。
  5. 如果加锁失败,立刻向全部5个节点执行Lua脚本释放锁,清理残留锁。

释放锁

向所有节点执行Lua脚本释放锁,校验value是自己的才删除,不管该节点之前加锁成功还是失败。

RedLock存在的争议与缺陷(面试重点)

  1. 强依赖系统时钟

    如果节点发生时钟跳变(NTP时间校正),锁会提前过期失效,破坏互斥性。

  2. 无法解决客户端GC停顿、网络延迟问题

    就算红锁拿到锁,如果客户端发生长时间FullGC、网络阻塞,业务没跑完锁过期,其他客户端依旧能拿到锁;红锁解决不了客户端侧停顿问题,也没有生成单调递增的防篡改fencing令牌,无法给下游资源做校验。

  3. 运维成本很高

    需要维护5套独立Redis实例,资源消耗大;性能下降,一次加锁要和多节点网络交互。

著名辩论:分布式专家Martin Kleppmann质疑RedLock的安全性;Redis作者认为它适合"追求效率,允许极小概率出错"场景,绝对强一致性场景不要用RedLock。

线上实践结论

  1. 绝大多数业务线上几乎不用RedLock。
  2. 如果业务可以容忍极小概率锁失效,直接用单机Redis + Redisson(看门狗续期),简单好用。
  3. 如果要求绝对不能出现并发问题,放弃Redis,选用 Zookeeper / Etcd,基于一致性协议实现分布式锁。

总结

RedLock想用多节点多数派解决单机主从切换丢锁,但本身依赖系统时间,有安全漏洞,运维成本高;工程实践很少落地,强一致性场景优先用ZK/Etcd。

面试记忆点:5个独立主节点、半数成功、时钟漂移缺陷、不能解决客户端GC停顿、线上很少用。

相关推荐
论文复现现场1 小时前
2026 低成本 AI Agent 模型怎么选?DeepSeek V4.1 Flash、Qwen3.8 Flash、GLM-5.3 Flash 对比
数据库·人工智能·qwen·ai agent·glm·deepseek
摇滚侠9 小时前
《On Java 中文版 基础卷》阅读笔记 实现隐藏 12
java·数据库·笔记
川石课堂软件测试10 小时前
学习软件测试需掌握的一些知识
数据库·python·sql·功能测试·网络协议·mysql·http
2501_9377671611 小时前
自建 SQL 数据库定时备份踩坑复盘与落地思路
数据库·sql
silvamux_12 小时前
10款模型写种草笔记:可发布性、返工来源与成本数据缺口复盘
java·数据库·笔记
夕除13 小时前
redis--模型
redis
I Am a robert girl14 小时前
从 GameHorizon 拆解多时间尺度游戏评测:数据管线、离线基准与在线回放的三层设计
数据库·游戏·多时间尺度·数据管线·游戏评测·离线基准·在线回放
躺柒14 小时前
读数据安全架构设计与实践17安全架构案例(下)
数据库·安全·零信任·安全架构·防火墙·无边界
SelectDB14 小时前
实时更新排错现场:导入了却查到旧数据,和 FINAL 越加越慢的两条路
大数据·数据库·数据分析
SelectDB15 小时前
拿 Planet 的账单一行行对下来,我总结出三个可自查的校验点
大数据·数据库·数据分析