一、基于Redis实现分布式锁

(1)基于Lua脚本(包含SETNX + EXPIRE两条指令)实现分布式锁

(2)基于SET的扩展命令(SET EX PX NX)实现分布式锁

SET命令扩展命令

  • NX :表示key不存在的时候,才能set成功,也即保证只有第一个客户端请求才能获得锁,而其他客户端请求只能等其释放锁,才能获取。
  • EX seconds :设定key的过期时间,时间单位是秒。
  • PX milliseconds: 设定key的过期时间,单位为毫秒
  • XX: 仅当key存在时设置值

(3)基于Redisson+Redlock实现分布式锁

Redisson底层原理图:

Redisson也是使用Redis的SET key value NX PX expireTime 命令(即 SET 命令的扩展选项 NX 和 PX),这是一个原子性操作。

Redisson 采用了“看门狗”机制,当客户端获取锁成功后,Redisson 会启动一个后台线程定期为锁续期。

Redisson 为每个线程生成一个唯一的 UUID 标识,以确保锁的持有者是唯一的。

Redisson 分布式锁是可重入的,即一个线程可以多次获取同一把锁,而不会发生死锁。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注