1. 基于数据库的锁(天然的分布式锁)
原理:通过数据库表的唯一约束或乐观锁实现。
唯一索引锁:插入一条代表锁的记录,利用唯一索引冲突阻止并发。
乐观锁:通过版本号或时间戳字段实现 CAS(Compare and Swap)。
缺点:性能低:高并发下数据库压力大。
无自动续期:需手动处理锁超时和死锁。
适用场景:低并发、简单业务场景
2.ApacheCurator(基于ZooKeeper)
原理:利用 ZooKeeper 的临时顺序节点(Ephemeral Sequential Nodes)和 Watcher 机制实现锁的互斥和阻塞。
核心类:InterProcessMutex,提供 acquire() 和 release() 方法。
1 | InterProcessMutex lock = new InterProcessMutex(client, "/locks/order"); |
优势:强一致性:ZooKeeper 的 CP 特性保证锁的强一致性。
自动释放:客户端断开连接时,临时节点自动删除,避免死锁。
可重入性:支持同一线程多次获取锁。
适用场景:对一致性要求极高的场景(如金融交易)
3.Spring Integration(基于Redis)
原理:Spring 生态提供的分布式锁抽象,支持多种存储后端(如 Redis、JDBC)。
核心类:RedisLockRegistry,通过 obtain() 方法获取锁。
1 | LockRegistry lockRegistry = new RedisLockRegistry(redisConnectionFactory, "lockPrefix"); |
优势:轻量级:无需引入额外依赖(若已使用Spring生态)。
多存储支持:可切换为JDBC或ZooKeeper后端。
缺点:功能较 Redisson 简单,需自行处理锁续期和重试