Lazy loaded image
分布式锁有哪些实现方式?
字数 350阅读时长≈ 1 分钟
2026-10-15
type
Post
status
Published
date
Oct 15, 2026
slug
lock
summary
tags
技术探索
category
手写
icon
password
分布式锁主要有 3 种实现方式:数据库、Redis 和 ZooKeeper。
对比
数据库
Redis
ZooKeeper
性能
较低
高
中等
实现复杂度
低
中等
较高
锁释放
删除记录 / 事务结束
主动解锁 / TTL
删除节点 / 会话失效
适用场景
低并发业务
高并发业务
分布式协调
典型方案
唯一索引、行锁
Redisson
Curator

ZooKeeper 实现

假设三个客户端争抢订单锁:
流程:
  1. 每个客户端创建一个临时顺序节点。
  1. 序号最小的客户端获取锁。
  1. 其他客户端监听自己的前驱节点。
  1. 前驱节点删除后,重新检查自己是否获得锁。
  1. 客户端会话失效时,临时节点自动删除。
ZooKeeper 更适合对协调一致性要求较高的场景,但仍需考虑会话失效后旧持有者继续执行的问题。
怎么解决?
通过 Fencing Token(栅栏令牌)解决。 每次获取分布式锁时,分配一个单调递增的 Token。下游资源只接受 Token 不小于已处理最大 Token 的请求,拒绝旧 Token 的写入,从而防止锁失效的旧客户端继续修改数据。
 
回到首页