跳过正文
  1. 技术文档/
  2. Redis/
  3. 高级/
  4. 应用场景/

分布式锁

特性
#

  • 互斥性: 锁的目的是获取资源的使用权,因此只能一个竞争者持有锁
  • 安全性: 一个竞争者持有锁期间,若因为意外情况未能及时释放锁,也有兜底策略释放锁,保证其他的竞争者可以获得锁
  • 对称性: 同一个锁的枷锁和解锁必须是同一个竞争者, 不能把其他竞争者的锁给释放掉了
  • 可靠性: 需要一定的异常处理能力,容灾能力

实现
#

set key value NX PX expire

// key 为锁标识
// value 为持锁者标识,只能持有者操作锁,非持有者不可操作,保证了**对称性**
// NX 存在则不操作,即只有第一个人操作成功,后来者操作会失败,保证了**互斥性**
// expire 设置过期时间,即使意外情况没有释放锁,也会因过期自动释放锁,保证了**安全性**

若业务逻辑执行时间超过锁的过期时间,可以考虑锁续期

释放锁时,由于需要检查锁的归属及释放操作,这一过程如何保证是原子化的?
#

使用 lua 脚本执行这一过程,保证原子性

至此就是一个较完善、可用的分布式锁了

那么可靠性如何保证?
#

Redis 分布式锁的优化实现 redission
#

https://juejin.cn/post/7135307906031091749