Redis 分布式锁进阶第七十五篇

一、开篇概述

目前工业界主流分布式锁两大技术栈:Redis 分布式锁ZooKeeper 分布式锁。二者都能实现跨进程、跨实例资源互斥,但设计思想、底层机制、特性、性能、容错能力截然不同。 很多团队选型时容易纠结:到底该用哪一种?本篇抛开理论空谈,结合线上真实业务场景、压力表现、故障场景逐一拆解,同时补充跨语言实现,覆盖 Java 之外的主流开发语言。

二、ZooKeeper 分布式锁核心原理

先快速理清 ZK 锁的底层实现,方便后续对比。ZK 基于树形节点 + 临时节点 + 有序节点 + Watch 监听实现分布式锁,是典型的 CP 模型组件。

2.1 核心数据节点类型

  1. 持久节点:节点创建后永久存在,手动删除才会消失;
  2. 临时节点(Ephemeral) :客户端会话断开、宕机、网络中断,节点自动删除,天然防死锁;
  3. 临时有序节点:在临时节点基础上,ZK 自动为节点后缀拼接全局递增序号,用来实现排队。

2.2 标准公平锁执行流程(主流实现)

  1. 所有竞争线程在同一父节点下,创建临时有序子节点
  2. 获取当前父节点下所有子节点并排序,判断自己创建的节点是否为序号最小节点;
  3. 若是最小节点:成功获取锁,执行业务逻辑;
  4. 若不是最小节点:对前一个序号节点注册 Watch 监听,进入阻塞等待;
  5. 持有锁的线程执行完毕,主动删除自身节点;
  6. 前序节点被删除后,触发 Watch 事件,唤醒当前线程,再次判断序号竞争锁。

2.3 ZK 锁核心原生特性

  • 天然公平锁:有序节点保证请求先后顺序,无线程饥饿;
  • 天然防死锁:依赖临时节点,客户端宕机自动删节点,无需手动设置过期时间;
  • 强一致性:ZK 集群数据同步采用 ZAB 协议,半数节点写入成功即生效,无主从异步丢锁问题;
  • 阻塞唤醒:基于 Watch 机制,无空轮询,CPU 占用极低。

2.4 简单 Java 原生 ZK 锁示例(Curator 框架)

生产环境基本使用 Apache Curator 封装好的锁 API,无需手写原生节点逻辑:

相关推荐
jiayou6418 小时前
KingbaseES 表级与列级加密完全指南
数据库·后端
用户3074596982072 天前
Redis 延时队列详解
redis
GBASE2 天前
G术时刻 |GBase 8s数据库事务并发控制之封锁技术介绍(下)
数据库
烤代码的吐司君2 天前
Redis 数据结构 ZSet, BIT, HyperLogLog,Geo 空间数据
redis·后端
xiezhr2 天前
逛GitHub发现了一款免费的带AI功能的数据库管理工具
数据库·ai编程·dba
吃糖的小孩3 天前
给 QQ AI 机器人设计“可控记忆”:会话摘要、手动长期记忆与角色卡边界
数据库
笃行3504 天前
金仓数据库数据安全双防线:静态存储加密与传输加密实战
数据库
笃行3504 天前
金仓数据库物理备份实战:sys_rman 全流程演练与误覆盖抢救
数据库
笃行3504 天前
金仓数据库逻辑备份实战:从全库导出到 Schema 替换的完整闭环
数据库