文章目录
概念
分布式锁就是分布式场景下的锁,比如多台不同机器上的进程,去竞争同一项资源,就是分布式锁。
优秀分布式锁的特征
-
互斥性: 只能有一个竞争者持有锁
-
安全性: 避免死锁发生, 所以需要设置过期时间, 防止意外崩溃无法释放锁
-
对称性: 同一个锁, 加锁者必须负责解锁, 也就是加锁和解锁必须是同一个任务, 不能解除其他任务的锁
-
可靠性: 需要具有一定程度的异常处理和抗压, 容灾能力
分布式锁的实现方式
最简单版本(互斥性)
setnx key value
如果 key 不存在, 则会 将 key 设置为 value, 返回 1
如果 key 存在, 则不会有影响(不会加锁), 返回 0
delete key
通过 delete 解锁
支持过期时间(互斥性, 安全性)
- 使用 redis 中的
expire(失效)
命令, 设置一个 key 的锁的过期时间 - 由于 setnx 和 expire 不是原子操作, 所以 redis 又有原子操作的语句
set key value nx ex seconds
// set a 1 nx ex 3
<