Redisson实现分布式锁
Redisson简介
Reddison是一个基于Java的客户端,是一个在Redis基础上实现的分布式工具的集合。它不仅提供了一系列的分布式Java常用对象,还提供了很多分布式服务,其中就包含分布式锁。
Redisson实现分布式锁步骤(简述)
通过RedissonClient获取RLock
然后使用RLock加锁
执行业务代码后,释放锁
采用配置类方式实现分布式锁
在任意地方注入RedissonClient即可使用锁
其中,tryLock中的参数:最大等待时间默认为-1,即不等待;锁自动释放时间为30s。
Redisson分布式锁核心机制
锁续期(Watchdog)
利用Watchdog,每隔一段时间,重置超时时间。
默认每10秒检查锁状态,若业务未完成则自动续期至30秒,避免因执行超时导致锁失效
可重入性
可重入性其实就是指同一个线程可以重复获取同一把锁的能力,避免线程因重复加锁而导致死锁。
通过Hash结构记录线程ID(field)和重入次数(value),同一线程可重复加锁
加锁原子性
通过Lua脚本实现 exists + hexists + hincrby + expire 的原子操作,确保锁竞争时仅一个线程成功。
获取锁的流程如下:
释放锁的流程如下: