Redisson实现分布式锁

Redisson简介

Reddison是一个基于Java的客户端,是一个在Redis基础上实现的分布式工具的集合。它不仅提供了一系列的分布式Java常用对象,还提供了很多分布式服务,其中就包含分布式锁

Redisson实现分布式锁步骤(简述)

  1. 通过RedissonClient获取RLock

  2. 然后使用RLock加锁

  3. 执行业务代码后,释放锁

采用配置类方式实现分布式锁

在任意地方注入RedissonClient即可使用锁

其中,tryLock中的参数:最大等待时间默认为-1,即不等待;锁自动释放时间为30s。

Redisson分布式锁核心机制

锁续期(Watchdog)

利用Watchdog,每隔一段时间,重置超时时间。

默认每10秒检查锁状态,若业务未完成则自动续期至30秒,避免因执行超时导致锁失效

可重入性

可重入性其实就是指同一个线程可以重复获取同一把锁的能力,避免线程因重复加锁而导致死锁。

通过Hash结构 记录线程ID(field)重入次数(value),同一线程可重复加锁

加锁原子性

通过Lua脚本实现 exists + hexists + hincrby + expire 的原子操作,确保锁竞争时仅一个线程成功。

获取锁的流程如下:

释放锁 的流程如下: