文章目录
前言
本文将使用最小可行步骤,实现SpringBoot中使用Redisson实现分布式可重入锁。
一、实现分布式锁的方式
- 基于数据库
- 基于Redis
- 基于Zookeeper
- 基于Chubby
- 基于etcd
二、Redis-Redisson的锁
- 可重入锁
- 读写锁
- 红锁
- 公平锁
- 联锁
- …
本文实现的是 可重入锁
三、动前须知
- 实现默认可重入锁
RLock myLock = redissonClient.getLock("锁的名称");
myLock.lock();
上述代码有如下特点
- 阻塞式等待。默认加的锁都是30秒时间
- 看门狗机制。锁会自动续期,只要占锁成功就会启动一个定时任务,每10秒续期一次,重置时间为新的30s。当业务完成时,就不再续期。
- …
- 实现自己定义时间的可重入锁
RLock myLock = redissonClient.getLock("锁的名称");
myLock.lock(10,TimeUnit.SECONDS);
上述代码有如下特点
- 10s后自动解锁。不会自动续期,如果此时业务没执行完就有问题了。
- …
四、SpringBoot+Redisson实现可重入锁的最简步骤
1. 正在运行的Redis
启动docker后,运行下列docker命令可直接在本地启动redis
docker pull redis
docker run --restart=always -p 6379:6379 --name redis -d redis --requirepass 123456
2. pom.xml中引入必备依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
</dependency>
3. 将SpringBoot与redis连接起来
spring:
redis:
host: