type
Post
status
Published
date
Oct 15, 2026
slug
lock
summary
tags
技术探索
category
手写
icon
password
分布式锁主要有 3 种实现方式:数据库、Redis 和 ZooKeeper。
对比 | 数据库 | Redis | ZooKeeper |
性能 | 较低 | 高 | 中等 |
实现复杂度 | 低 | 中等 | 较高 |
锁释放 | 删除记录 / 事务结束 | 主动解锁 / TTL | 删除节点 / 会话失效 |
适用场景 | 低并发业务 | 高并发业务 | 分布式协调 |
典型方案 | 唯一索引、行锁 | Redisson | Curator |
ZooKeeper 实现
假设三个客户端争抢订单锁:
流程:
- 每个客户端创建一个临时顺序节点。
- 序号最小的客户端获取锁。
- 其他客户端监听自己的前驱节点。
- 前驱节点删除后,重新检查自己是否获得锁。
- 客户端会话失效时,临时节点自动删除。
ZooKeeper 更适合对协调一致性要求较高的场景,但仍需考虑会话失效后旧持有者继续执行的问题。
怎么解决?
通过 Fencing Token(栅栏令牌)解决。
每次获取分布式锁时,分配一个单调递增的 Token。下游资源只接受 Token 不小于已处理最大 Token 的请求,拒绝旧 Token 的写入,从而防止锁失效的旧客户端继续修改数据。
分享
