分布式锁常见的三种实现方式:
- 数据库乐观锁;
- 基于Redis的分布式锁;
- 基于ZooKeeper的分布式锁。
Redis要实现分布式锁,以下条件应该得到满足:
- 互斥性:在任意时刻,只有一个客户端能持有锁。
- 不能死锁:客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。
- 容错性:只要大部分的Redis节点正常运行,客户端就可以加锁和解锁。
实现方式
- 通过 set key value px milliseconds nx 命令实现加锁, 通过Lua脚本实现解锁。
- Redisson实现
参考: |